ruby-on-rails - Ruby 多重哈希总结

标签 ruby-on-rails ruby hash sum

通过选择我得到以下响应:

=> [{:month=>[3, 3, 9, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
:dates=>["30.10:", "29.10:", "28.10:", "27.10:", "26.10:", "25.10:", "24.10:", "23.10:", "22.10:", "21.10:", "20.10:", "19.10:", "18.10:", "17.10:", "16.10:", "15.10:", "14.10:", "13.10:", "12.10:", "11.10:", "10.10:", "09.10:", "08.10:", "07.10:", "06.10:", "05.10:", "04.10:", "03.10:", "02.10:", "01.10:"]},
{:month=>[1, 3, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
:dates=>["30.10:", "29.10:", "28.10:", "27.10:", "26.10:", "25.10:", "24.10:", "23.10:", "22.10:", "21.10:", "20.10:", "19.10:", "18.10:", "17.10:", "16.10:", "15.10:", "14.10:", "13.10:", "12.10:", "11.10:", "10.10:", "09.10:", "08.10:", "07.10:", "06.10:", "05.10:", "04.10:", "03.10:", "02.10:", "01.10:"]}]

在这个例子中有两组散列。可能会有更多结果 但每次的日期都是一样的。

是否有一种简单的方法可以将其组合成以下结果?

[{:month=>[4, 6, 14, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
:dates=>["30.10:", "29.10:", "28.10:", "27.10:", "26.10:", "25.10:", "24.10:", "23.10:", "22.10:", "21.10:", "20.10:", "19.10:", "18.10:", "17.10:", "16.10:", "15.10:", "14.10:", "13.10:", "12.10:", "11.10:", "10.10:", "09.10:", "08.10:", "07.10:", "06.10:", "05.10:", "04.10:", "03.10:", "02.10:", "01.10:"]}

对于数组,我可以使用 transpose.map {|x| x.reduce(:+)} 但不适用于哈希。 哈希有没有类似的解决方案?

最佳答案

arr = [{ :month=>[3, 3, 9], :dates=>["30.10:", "29.10:"] },
       { :month=>[1, 3, 5], :dates=>["30.10:", "29.10:"] },
       { :month=>[2, 4, 6], :dates=>["30.10:", "29.10:"] }]

{ :month=>arr.map { |h| h[:month] }.transpose.map { |a| a.reduce(:+) },
  :dates=>arr.first[:dates] }
  #=> {:month=>[6, 10, 20], :dates=>["30.10:", "29.10:"]} 

步骤如下。

a = arr.map { |h| h[:month] }
  #=> [[3, 3, 9], [1, 3, 5], [2, 4, 6]] 
b = a.transpose
  #=> [[3, 1, 2], [3, 3, 4], [9, 5, 6]] 
c = b.map { |a| a.reduce(:+) }
  #=> [6, 10, 20] 
d = arr.first
  #=> {:month=>[3, 3, 9], :dates=>["30.10:", "29.10:"]} 
e = d[:dates]
  #=> ["30.10:", "29.10:"] 
{ :month=>c, :dates=>e }
  #=> {:month=>[6, 10, 20], :dates=>["30.10:", "29.10:"]} 

关于ruby-on-rails - Ruby 多重哈希总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345624/

相关文章:

ruby-on-rails - 批量作业 2 级深?

ruby - 如何在 Ruby 1.8 中解析 URI 的查询部分?

Perl:哈希键中的常量值

mysql - 10 :00 - 00:00 之间的 Rails ActiveRecord 时间

ruby-on-rails - Rails 4.0 未定义方法 `call'

ruby-on-rails - Ruby on Rails 嵌套模型未使用 form_for 更新,但更新时没有错误

c# - 将 .Net 4.5.1 中的 KeyDerivation.Pbkdf2 转换为 .Net 4.0

hash - 布隆过滤器和 FM 草图的区别

ruby-on-rails - Ruby On Rails 模型中的自保存

ruby - 在 [] 中找不到 heroku (>= 0) (Gem::LoadError)