ruby排序方法

ruby排序方法,ruby,Ruby,我刚刚开始学习ruby。我有一个哈希数组。我希望能够根据散列中的元素对数组进行排序。我想我应该能够使用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,

我刚刚开始学习ruby。我有一个哈希数组。我希望能够根据散列中的元素对数组进行排序。我想我应该能够使用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 name
array.sort_by do |item|
    item[:name]
end
puts(array)

数组没有发生任何变化。也没有错误

您必须存储结果:

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

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

array.sort_by!{|item| item[:name]} 

您也可以通过正常的排序方法来完成

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

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

谢谢。我也有同样的想法。通过例子看到了另一种情况。因此,sort_by不做in place.Bang方法(以!)结尾的方法)修改到位,但最好不要使用它们,而是创建新对象作为旧对象的修改版本。通过允许方法对对象进行变异,可以将细微的错误引入到程序中。感谢您的洞察力。