【问题标题】:sort a hash by using the values of keys使用键的值对哈希进行排序
【发布时间】:2012-05-01 11:03:00
【问题描述】:

我有一个这样的哈希:

a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }

我想根据那里的值对这个哈希进行排序,即:3,6,2,10

我可以a.values.sort

但它返回一个仅包含排序值的数组。我想对实际的散列进行排序,所以它应该返回一个新的散列(或者最好用排序后的散列更新原始散列),其中包含所有相同的键值对但已排序!!

【问题讨论】:

    标签: ruby


    【解决方案1】:

    这适用于 Ruby 1.9:

    a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }
    p Hash[a.sort_by{|k,v| v}]
    #=> {13=>2, 29=>3, 14=>6, 32=>10}
    

    【讨论】:

    • 酷,但他希望它按值排序:Hash[a.invert.sort].invert
    • 是的 Abe Voelker.. 这就是答案! a.invert 将键值转换为值键,然后对它们进行排序,然后将它们切换回来!太棒了:D
    • steenslag...那就更好了! :D thnx
    • sort_byinverting 两次要好得多。
    • 太好了,谢谢!花了一些时间寻找答案。几乎所有关于 Ruby 1.8.7 的答案都是针对 1.9 及更高版本的。
    【解决方案2】:

    Ruby(1.9 之前)中的哈希是未排序的。您不能“返回具有相同排序的键值对的新哈希”,因为哈希实现根本不保持条目排序。你有两个选择:

    1. 使用 ActiveSupport::OrderedHash 实例(来自 active_support gem)
    2. 使用排序对的数组来执行任何需要排序输入的操作。通过将该数组传递给 Hash 构造函数(Hash.new 或 Hash[]),转换回 Hash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多