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 id 中还有映射到hashb的第一个数组中的第二个值。那些是 4121-x, 231-z 对应哈希 aida

我想更正哈希中的年龄a并将其与哈希交换realageb 可以通过多个步骤来完成,但是是否可以在一个衬里或非常短的时间内完成?所以最后正确的哈希a应该看起来像

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只有idb.

此外,行顺序无关紧要,行数也无关紧要,重要b的是要有一行与id已处理的行相同a

这是一个工作演示

于 2012-12-01T22:24:05.720 回答