我认为这很容易,而且已经很难找到了,但似乎无法让它发挥作用。
我有以下哈希:
@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]}
但是,它只是以非字母顺序输出完整结果。
答案 0 :(得分:12)
问题是a和b是Hash,所以你必须使用“name”作为键或索引而不是0.所以这应该这样做
@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']}
答案 1 :(得分: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