我刚开始学习红宝石。我有一系列哈希。我希望能够根据哈希中的元素对数组进行排序。我想我应该可以使用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)
阵列没有任何反应。也没有错误。
答案 0 :(得分:39)
您必须存储结果:
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
答案 1 :(得分:0)
您可以在一行中使用按方法排序:
array.sort_by!{|item| item[:name]}
答案 2 :(得分:0)
您也可以通过常规的 sort 方法
array.sort { |a,b| a[:name] <=> b[:name] }
以上是升序,对于降序a替换为b。要修改数组本身,请使用 sort!