【问题标题】:Merge two hashes together and performing computation将两个哈希合并在一起并执行计算
【发布时间】:2014-08-28 16:31:18
【问题描述】:

我正在尝试将两个散列组合在一起,但在找出最佳方法时遇到了麻烦。我觉得必须有一种简单的方法来使用枚举......

我想转这个:

[{ id: 5, count: 10 }, { id: 6, count: -3 }, { id: 5, count: -2 }, { id: 3, count: 4}]

进入这个:

[{ id: 5, count: 8 }, { id: 6, count: -3 }, { id: 3, count: 4}]

这样,具有相同“id”的哈希就会被加在一起。有人对如何快速做到这一点有任何想法吗?

我尝试了 Hash.merge,但没有正常工作...

【问题讨论】:

    标签: ruby-on-rails ruby hash enumerable


    【解决方案1】:

    这是一种方法:

    hash = [{ id: 5, count: 10 }, { id: 6, count: -3 }, { id: 5, count: -2 }, { id: 3, count: 4}]
    merged_hash = hash.group_by { |h| h[:id] }.map do |_,v|
      v.reduce do |h1,h2| 
        h1.merge(h2) { |k,o,n| k == :count ? o + n : o }
      end
    end
    
    merged_hash 
    # => [{:id=>5, :count=>8}, {:id=>6, :count=>-3}, {:id=>3, :count=>4}]
    

    看看这些方法Hash#mergeEnumerable#reduceEnumerable#group_by

    【讨论】:

    • 酷。这样可行。问题:map函数中的下划线是做什么的?我意识到这通常是关键,价值
    • @BrianW 这也是一个变量。阅读this。您将使用它,当变量的值时,您不会使用但必须分配它。这不会产生任何警告,但如果我使用 keyk 等并且不在程序中的任何位置使用它,该程序将引发类似已分配但未使用的变量的警告。
    猜你喜欢
    • 2016-09-02
    • 2013-09-09
    • 2011-02-21
    • 2017-12-18
    • 2011-04-23
    • 2016-10-07
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多