【问题标题】:Ruby sort by hash and valueRuby 按哈希和值排序
【发布时间】:2017-03-24 08:27:35
【问题描述】:

我有这样的数据:

hash_data = [
  {:key1 => 'value4', :sortby => 4},
  {:key1 => 'valuesds6', :sortby => 6},
  {:key1 => 'valuedsd', :sortby => 1},
  {:key1 => 'value2_data_is_here', :sortby => 2}
]

我想通过键sortby对其进行排序

hash_data = [
  {:key1 => 'valuedsd', :sortby => 1},
  {:key1 => 'value2_data_is_here', :sortby => 2},
  {:key1 => 'value4', :sortby => 4},
  {:key1 => 'valuesds6', :sortby => 6}
]

我尝试过使用冒泡排序,但Hash 类中是否有任何内置函数用于此目的?

【问题讨论】:

    标签: ruby-on-rails ruby sorting hashmap


    【解决方案1】:

    Enumerable#sort_by 救援:

    hash_data.sort_by { |hash| hash[:sortby] }
    #=> [{:key1=>"valuedsd", :sortby=>1}, {:key1=>"value2_data_is_here", :sortby=>2}, {:key1=>"value4", :sortby=>4}, {:key1=>"valuesds6", :sortby=>6}]
    

    如果您不关心初始对象,我建议使用Array#sort_by! 就地修改 - 它更节省资源:

    hash_data.sort_by! { |hash| hash[:sortby] }
    

    如果你有不同类型的数据作为sortby键的值,你应该先统一数据类型,然后再进行排序。

    要使数组按降序排序,请使用Enumerable#reverse(或reverse!):

    hash_data.sort_by {|hash| hash[:sortby] }.reverse
    #=> [{:key1=>"valuesds6", :sortby=>6}, {:key1=>"value4", :sortby=>4}, {:key1=>"value2_data_is_here", :sortby=>2}, {:key1=>"valuedsd", :sortby=>1}]
    

    按降序排序的另一个选项如下 - 注意减号(感谢 @sagarpandya82):

    hash_data.sort_by {|hash| -hash[:sortby] }
    

    【讨论】:

    • 给我这个错误:comparison of Float with -0.6 failed
    • @user1735921 与您的输入数据一起工作。如果您有更具体的问题 - 用真实数据编辑您的问题,因为提出问题没有任何意义,得到一个完全有效的答案然后说“嘿,在我与 OP 完全不同的真实数据上它没有工作”:)
    • 嘿,它对数据进行排序,但它按升序排序,我想要降序
    • 降序排列 hash_data.sort_by {|hash| -hash[:sortby] } 也可以。
    • @sagarpandya82 实际上是一个非常好的注释!将编辑答案
    猜你喜欢
    • 2011-01-28
    • 2019-08-11
    • 1970-01-01
    • 2010-10-20
    • 2018-11-15
    • 2011-05-19
    • 1970-01-01
    • 2012-10-24
    • 2011-02-02
    相关资源
    最近更新 更多