2012-07-04 199 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 
相关问题