2012-07-04 254 views
5

我認爲這很容易,並且已經搜索到了這個非常困難的內容,但似乎無法使其工作。根據字段按字母順序對散列進行排序

我有以下散列:

@friends = [{"name"=>"John Smith", "id"=>"12345"}, {"name"=>"Jane Doe", "id"=>"23456"}, {"name"=>"Samuel Jackson", "id"=>"34567"}, {"name"=>"Kate Upton", "id"=>"45678"}] 

我想通過姓名的字母順序排序。

現在我「米這樣做:

@friends.sort{|a,b| a[0]<=>b[0]} 

然而,它只是輸出非字母順序排列的全部結果

回答

11

的問題是,A和B都是亂碼,所以你必須使用「姓名」作爲鍵或索引,而不是所以這應該這樣做

@friends.sort{|a,b| a['name']<=>b['name']} 

還記得使用排序!修改@friends變量或將其設置爲結果

@friends.sort!{|a,b| a['name']<=>b['name']} 

@friends = @friends.sort{|a,b| a['name']<=>b['name']} 
+0

偉大的工作。謝謝! – user749798

7

它可以通過一鍵排序,只是知道如果關鍵是一個字符串或執行此操作時的象徵

@friends.sort_by { |f| f['name'] } 

如果你想讓它不區分大小寫,那麼你總是可以做:

@friends.sort_by { |f| f['name'].downcase } 

當然,你可以隨時使用!來保存回@friends

>> @friends.sort_by! { |f| f['name'] } 
>> @friends # now returns the sorted array of hashes 
相關問題