我有一系列哈希:
[{:foo => 1,:bar => 2},{:foo => 2,:bar => 4} ...]
和一个整数数组:
[3,6]
我希望将整数数组和散列中的值组合起来,结果如下:
[{:foo => 1,:bar => 2,:baz => 3},:bar => 4,:baz => 6}]
我目前正在这样做:
myArrayOfHashes.each_with_index |myHash,index| myHash[:baz] = myArrayOfIntegers[index] end
这是正确的方法吗?
我想象一个更实用的方法,我同时迭代两个数组,就像使用zip map的东西.
解决方法
尝试:
require 'pp' ary_of_hashes = [{:foo => 1,:bar => 4}] [3,6].zip(ary_of_hashes).each do |i,h| h[:baz] = i end pp ary_of_hashes
结果如下:
[{:foo=>1,:bar=>2,:baz=>3},{:foo=>2,:bar=>4,:baz=>6}]
zip是一个很好的工具,但是地图不会真的买得太多,至少在这种情况下你不能轻易做到.
另外,不要使用像myArrayOfHashes这样的CamelCase来命名变量,而是使用snake_case,比如ary_of_hashes.我们使用CamelCase作为类名.从技术上讲,我们可以使用混合大小写的变量,但按照惯例,我们不会这样做.
并且,可以使用each_with_index,但它会导致代码笨拙,因为它会强制您使用索引[3,6].让zip连接两个数组的相应元素,你将拥有按摩哈希所需的一切.