通过选择我得到以下响应:
=> [{: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/