2012-07-04 11 views
5

Ich würde denken, das wäre einfach, und habe nach diesem ziemlich hart gesucht, aber kann nicht scheinen, um es zur Arbeit zu bringen.Sortieren Hashes in Array alphabetisch von einem Feld

Ich habe folgende hash:

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

Ich versuche es mit dem Namen alphabetisch zu sortieren.

Im Moment habe ich "tue dies:.

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

Aber es gibt nur die vollständigen Ergebnisse in nicht-alphabetischer Reihenfolge

Antwort

11

Das Problem ist, dass a und b Hash sind, so dass Sie verwenden müssen „name“ als Schlüssel oder Index statt von 0. So sollte dies tun

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

Denken Sie auch daran, sort zu verwenden! zu modifizieren @friends Variable oder es auf das Ergebnis gesetzt

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

oder

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

hat super funktioniert. Danke! – user749798

7

Es ist möglich, durch einen Schlüssel zu sortieren, nur bewusst sein, wenn der Schlüssel ist ein String oder ein Symbol, wenn dies zu tun

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

Wenn Sie unempfindlich es Fall machen wollen, dann können Sie immer tun.

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

Und natürlich kann man immer ! dass @friends zurück zu speichern verwenden

>> @friends.sort_by! { |f| f['name'] } 
>> @friends # now returns the sorted array of hashes 
Verwandte Themen