0

次のように、年ごとにグループ化された配列のハッシュがあります。

{
    1979 => [
        [0] {
             :x => "12/79",
             :y => 71,
            :date => Sat, 01 Dec 1979
        }
    ],
    1980 => [
        [0] {
            :x => "01/80",
            :y => 1680,
            :date => Tue, 01 Jan 1980
        },
        [1] {
            :x => "08/80",
            :y => 1,
            :date => Fri, 01 Aug 1980
        }
    ]
}

年ごとにすべての[:y]キー値を合計し、新しい値を別のハッシュにプッシュする (または同じハッシュを折りたたむ) 方法が必要です:x

出力は次のようになります。

{
  { 
    :x => "1/79",
    :y => 71,
  },
  {
    :x => "1/1980",
    :y => 1681
  }
}
4

2 に答える 2

2

修正された入力ハッシュ:

foo = {
    1979 => [
        {
             :x => "12/79",
             :y => 71,
            :date => Sat, 01 Dec 1979
        }
    ],
    1980 => [
        {
            :x => "01/80",
            :y => 1680,
            :date => Tue, 01 Jan 1980
        },
        {
            :x => "08/80",
            :y => 1,
            :date => Fri, 01 Aug 1980
        }
    ]
}

bar = foo.collect { |k,v| { :x => "1/#{k.to_s}", :y => v.inject(0) { |s, vv| s + vv[:y]}} }

barは:

[
  { 
    :x => "1/79",
    :y => 71,
  },
  {
    :x => "1/1980",
    :y => 1681
  }
]
于 2013-09-09T19:14:47.157 に答える