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

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

4

2 回答 2

12

问题是a和b是哈希,所以你必须使用“名称”作为键或索引而不是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']}
于 2012-07-04T23:33:04.123 回答
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
于 2012-07-04T23:32:50.400 回答