25

我刚开始学习红宝石。我有一个哈希数组。我希望能够根据哈希中的元素对数组进行排序。我想我应该能够使用 sort_by 方法。有人可以帮忙吗?

#array of hashes
array = []
hash1 = {:name => "john", :age => 23}
hash2 = {:name => "tom", :age => 45}
hash3 = {:name => "adam", :age => 3}
array.push(hash1, hash2, hash3)
puts(array)

这是我的 sort_by 代码:

# sort by name
array.sort_by do |item|
    item[:name]
end
puts(array)

数组没有任何反应。也没有错误。

4

3 回答 3

43

您必须存储结果:

res = array.sort_by do |item|
    item[:name]
end 
puts res

或者修改数组本身:

array.sort_by! do |item| #note the exclamation mark
    item[:name]
end 
puts array
于 2013-01-01T20:24:45.093 回答
0

您可以在一行中使用排序方法:

array.sort_by!{|item| item[:name]} 
于 2018-11-27T09:30:25.813 回答
0

您也可以通过正常的排序方法来做到这一点

array.sort { |a,b| a[:name] <=> b[:name] }

以上是升序,降序用b替换a。要修改数组本身,请使用排序!

于 2018-11-27T09:37:16.160 回答