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}}
]
}
在哈希a
中,age
不正确
在哈希b
中,realage
是正确的。同样在哈希b
id 是第一个数组中的第二个值,映射到哈希a
id
。这些是 4121-x,231-z 对应于哈希 a
我想更正哈希a
中的年龄,并将其与哈希b
的realage
交换我可以分多个步骤完成,但是是否可以在一个衬里或非常短的衬里中完成?所以最后正确的哈希a
应该看起来像
a = {"rows" => [{"id" => "231-z", "name" => 'jon', "age"=> 33, "state" => 'AL'},
{"id" => "4121-x", "name" => 'ton', "age"=> 29, "state" => 'VA'}
]
}
这
看起来合理吗?
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"
}
]
}
请注意,只有在b
中找到相应的id
时,它才会更新a
。
要,行数也无关紧要,重要的是b
具有与a
中处理的行具有相同id
的行