2017-08-23 45 views
0

我創建在一個軌道的陣列(這不是一個模型和沒有屬性)等:由值軌道順序排列時沒有在模型

name_1 = 5 
name_2 = 14 
name_3 = 26 
name_4 = 3 
... 

@names = [name_1, name_2, name_3, name_4, name_5] 

每個「name_x」具有存儲爲整數其值。

如何對數組進行排序,使其按當前值排序輸出[最高=>最低],並顯示「名稱」[鍵,值]?。

目前,

puts @names 

只顯示無秩序的價值觀。 Tks指出我在正確的方向,theres許多職位相關數組,但大多數asume它的屬性模型,你可以說,按屬性排序。當你沒有像這種情況下的特定屬性時,你如何訂購?

+0

你能解釋一下嗎?還顯示「名字」[key,value] *?你是什​​麼意思? – Pavan

+0

對不起,如果我的解釋不正確...我想看到值和該值的引用的名稱,它存儲爲「名稱_1 = 5」,這是一個很長的名單,有很多名稱,我需要知道什麼等於「5」,或者..什麼是來自......的價值,什麼等於14,26等......這是一個很長的名單。 – Francisco

+0

也許我存儲的值不正確,也許這是一個更好的辦法? – Francisco

回答

1

如果您想要名稱(鍵)和值,請使用Hash

@names = {name_1: 5, name_2: 14, name_3: 26, name_4: 3} 

一個HashEnumerable,這樣你就可以對它進行排序。然而,排序結果在一個數組中,但它很容易再次成爲Hash,並且Ruby中的散列保持插入順序。

@names.sort_by{|k,v| v} 
[[:name_4, 3], [:name_1, 5], [:name_2, 14], [:name_3, 26]] 

@names.sort_by{|k,v| v}.to_h 
{:name_4=>3, :name_1=>5, :name_2=>14, :name_3=>26} 

自然排序順序是升序(從小到大),但你可以否定sort_by值,或逆轉所產生的陣列。

@names.sort_by{|k,v| -v}.to_h 
{:name_3=>26, :name_2=>14, :name_1=>5, :name_4=>3} 

@names.sort_by{|k,v| v}.reverse.to_h 
{:name_3=>26, :name_2=>14, :name_1=>5, :name_4=>3}