【问题标题】:ruby sort_by method红宝石 sort_by 方法
【发布时间】:2018-11-27 17:41:11
【问题描述】:

我刚刚开始学习红宝石。我有一个哈希数组。我希望能够根据哈希中的元素对数组进行排序。我想我应该能够使用 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)

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    你必须存储结果:

    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
    

    【讨论】:

    • 谢谢。我也想通了。看到另一个 sort_by 示例。所以 sort_by 不会就地执行。
    • Bang 方法(以 ! 结尾的方法)就地修改,但最好不要使用它们,而是创建新对象作为旧对象的修改版本。通过允许方法改变您的对象,可以将细微的错误引入您的程序。
    【解决方案2】:

    你也可以通过普通的排序方法来完成

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

    上面是升序,降序用b代替a。要修改数组本身,请使用 sort!

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 2011-02-28
        • 2013-03-19
        • 2010-09-08
        • 2023-04-07
        • 2011-01-15
        • 2019-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多