0
a = {"rows" => [{"id" => "231-z", "name" => 'jon', "age"=> 27, "state" => 'AL'}, 
                {"id" => "4121-x", "name" => 'ton', "age"=> 37, "state" => 'VA'}
               ]
    }

b = {"rows" => [{"key" => ["xyz","4121-x"], "value" =>{"sum" => 12312, "realage" => 29}}, 
                {"key" => ["xyz","231-z"], "value" =>{"sum" => 1212, "realage" => 33}}
               ]
    }

hashaで、ageが正しくありません

hashbでは、realage正しいです。また、 hash bid には、最初の配列の 2 番目の値があり、これはidof hashにマップされますa。これらは 4121-x、231-z はハッシュ a に対応します。

ハッシュの年齢を修正し、それをオブ ハッシュaと交換したいのです が、複数のステップで行うことができますが、1 つのライナーまたは非常に短い時間で行うことは可能ですか? したがって、最終的に正しいハッシュは次のようになりますrealageba

a = {"rows" => [{"id" => "231-z", "name" => 'jon', "age"=> 33, "state" => 'AL'}, 
                {"id" => "4121-x", "name" => 'ton', "age"=> 29, "state" => 'VA'}
               ]
    }
4

1 に答える 1

2

これは合理的に見えますか?

a['rows'].each_with_index do |ah, i|
  (bh = b['rows'].select {|h| h['key'].last == ah['id'] }.first) &&
    a['rows'][i] = ah.update('age' => bh['value']['realage'])
end

p a

{
    "rows" => [
        [0] {
               "id" => "231-z",
             "name" => "jon",
              "age" => 33,
            "state" => "AL"
        },
        [1] {
               "id" => "4121-x",
             "name" => "ton",
              "age" => 29,
            "state" => "VA"
        }
    ]
}

a対応idするがで見つかった場合にのみ更新されることに注意してくださいb

また、行の順序は重要ではなく、行数も重要ではありません。重要なのは、処理されbた行と同じ行を持つことだけです。ida

これが実用的なデモです

于 2012-12-01T22:24:05.720 に答える