2010-10-20 62 views
-2

我有陣排序的Array紅寶石

a = ["aaa", "bee", "cee", "dee"] 

我想有新的陣列排序像:

a = ["cee", "aaa", "dee", "bee"] 

請幫助我。謝謝。

+0

這個'排序'究竟是如何? – 2010-10-20 08:17:58

+0

對不起,但我沒有得到你想要的結果的順序。 – Ruel 2010-10-20 08:18:21

+0

期望排序的具體邏輯是什麼?你能舉出另一個例子嗎?或者,對於長度爲4的數組,排序(基於索引)是否應該看起來像2,0,3,1? – Flinsch 2010-10-20 08:21:49

回答

4
a = ["aaa", "bee", "cee", "dee"] 
b = [a[2], a[0], a[3], a[1]] 

對不起,無法抗拒。真的,請解釋這個奇怪的「排序」。

+1

+1,因爲它的速度很快:) – 2010-10-20 08:27:34

2

你可以給爲Array.sort方法塊有一個自定義排序,像這樣:

[ "aaa", "bee", "cee", "dee"].sort do |x,y| 
    # do the actual custom sorting 
end 
0

從您的意見去,要排序以名字Blueray,DVD, ipodDVD, Bluray, ipod數組。

數組按定義基於順序,與散列不同。所以如果可能的話,你可以按照正確的順序重新定義你的數組。

否則,我會建議使用域名錶,帶有ID,名稱和描述。只要確保以正確的順序插入行(id是訂單),並且您的所有選擇框都可以使用這些選項按需要排序。也可以使用域名錶格,然後按照id來引用視頻類型。

0
a = ["aaa", "bee", "cee", "dee"] 
a = [2, 0, 3, 1].map { |i| a[i] } 
p a # => ["cee", "aaa", "dee", "bee"] 
1

查看陣列交叉點,例如, [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]

兩個數組中的第一個確定元素的排序。因此,只需使用預定義的數組["DVD", "Blueray", "ipod"]並對其執行未排序數組的交集操作:a = ["DVD", "Blueray", "ipod"] & a。例如:a = ["DVD", "Blueray", "ipod"] & ["ipod", "DVD"] #=> ["DVD", "ipod"]

非常優雅和簡單的解決方案。獎勵:無效值將被丟棄,沒有任何異常或錯誤或曾經。 (這是獎金嗎?也許!)

+0

不知道這是OP的需求,但我學到了新東西:) – nathanvda 2010-10-20 11:30:21