按字段按字母顺序对哈希值进行排序

时间:2012-07-04 23:21:39

标签: ruby

我认为这很容易,而且已经很难找到了,但似乎无法让它发挥作用。

我有以下哈希:

@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]}

但是,它只是以非字母顺序输出完整结果。

2 个答案:

答案 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