ruby - 在ruby中对嵌套哈希进行排序

标签 ruby sorting inject

提供了以下 ruby​​ 哈希:

{
    cat: {
        1: 2,
        2: 10,
        3: 11,
        4: 1
    },
    wings: {
        1: 3,
        2: 5,
        3: 7,
        4: 7
    },
    grimace: {
        1: 4,
        2: 5,
        3: 5,
        4: 1
    },
    stubborn: {
        1: 5,
        2: 3,
        3: 7,
        4: 5
    }
}

我如何根据“leaf”的总和(不包括“4”)对散列进行排序,例如,“cat”的比较值是 (2 + 10 + 11) = 23,“wings”的值是是 (3 + 5 + 7) = 15 所以如果我只比较这两个,它们的顺序是正确的,最高的总和在最上面。

可以安全地假设它总是 {1: value, 2: value, 3: value, 4: value} 因为这些是我定义的常量的键。

也可以安全地假设我只想排除键“4”,并始终使用键“1”、“2”和“3”

根据 Jordan 的建议,我让它工作了:

  tag_hash = tag_hash.sort_by do |h| 
    h[1].inject(0) do |sum, n| 
      n[0] == 4 ? sum : sum + (n[1] || 0)
    end
  end

结果似乎有点偏差,但它似乎是我的代码,一旦我确认我会接受答案,谢谢 Jordan!

我已经更新了我的解决方案以使用 Wayne Conrad 的想法,请参阅我对他的回答的评论 - 是否有可能它在排序时没有携带所有内容,我链接到我评论中显示实际排序结果的图像以图表形式..对我来说很奇怪..

最佳答案

tag_hash = tag_hash.sort_by do |_, leaf|
  leaf.reject do |key, _|
    key == 4
  end.collect(&:last).inject(:+)
end

关于ruby - 在ruby中对嵌套哈希进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672114/

相关文章:

javascript - Chrome Array.sorting 数字乱序

java - Google Guice 配置错误(未绑定(bind)实现)

ruby-on-rails - 博客文章的简单模型

ruby-on-rails - 如何从 Rspec 功能规范测试 Rails 日志记录?

arrays - 无法将枚举器转换为数组

java - RoboGuice @Inject 注入(inject)的类何时可以为 null?

java - Micronaut 循环依赖

ruby-on-rails - 嵌套的 content_tags 只显示最后一个 chilldren rails view helper

java - 使用字母数字值对 Java 中的自定义对象列表进行排序

algorithm - 维护一个大于内存的排序列表