[英]Add element in the array of hash object
像这样的哈希数组的哈希
{'1' => [{'a' => 'ss', 'b' => 'tt'},
{'a' => 'sdd', 'b' => 'tdd'}],
'2' => [{'a' => 'ffff', 'b' => 'sds'}],
'3' => [{'a' => 'ddd', 'b' => 'ssss'},
{'a' => 'sss', 'b' => 'sssss'}]}
我想在数组的每个哈希中添加'c' => 'xyz'
{'1' => [{'a' => 'ss', 'b' => 'tt', 'c' => 'xyz'},
{'a' => 'sdd', 'b' => 'tdd', 'c' => 'xyz'}],
'2' => [{'a' => 'ffff', 'b' => 'sds', 'c' => 'xyz'}],
'3' => [{'a' => 'ddd', 'b' => 'ssss', 'c' => 'xyz'},
{'a' => 'sss', 'b' => 'sssss', 'c' => 'xyz'}]}
我该如何实施?
my_arrays = {'1' => [{'a' => 'ss', 'b' => 'tt'},
{'a' => 'sdd', 'b' => 'tdd'}],
'2' => [{'a' => 'ffff', 'b' => 'sds'}],
'3' => [{'a' => 'ddd', 'b' => 'ssss'},
{'a' => 'sss', 'b' => 'sssss'}]}
my_arrays.each do |key, value|
value.each do |val|
val.store('c', 'xyz')
end
end
h = {'1' => [{'a' => 'ss', 'b' => 'tt'},
{'a' => 'sdd', 'b' => 'tdd'}],
'2' => [{'a' => 'ffff', 'b' => 'sds'}],
'3' => [{'a' => 'ddd', 'b' => 'ssss'},
{'a' => 'sss', 'b' => 'sssss'}]}
h.values.each do |ary|
ary.each do |inner_hash|
inner_hash['c'] = 'xyz'
end
end
上面的解决方案与marmeladze的答案非常相似,所以让我来解释一下区别:
inner_hash['c'] = 'xyz'
使用元素分配语法而不是调用#store
。 他们做的完全一样 。 在对marmeladze的回答的评论中,您询问:
我们可以通过迭代一次而不是每个循环2次来实现这一点吗?
h.values
给我们一个数组数组。 (因为它给出的值的数组h
和的值h
是数组)。我们可以折叠嵌套阵列, flatten
,因此只能与一个显式迭代获得相同的结果:
h.values.flatten.each do |inner_hash|
inner_hash['c'] = 'xyz'
end
或者,(等效地)如果您更喜欢一行
h.values.flatten.each { |ih| ih['c'] = 'xyz' }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.