嗨,我有两个如下的哈希数组
A = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
B = [{"value" => "true"}, {"value" => "true"}, {"value" => "true"}]
如何将它们合并为单个哈希数组 [{“ name” =>“ rihan”,“ value” => true“]
由于我需要对照以散列格式转换的竖线分隔的黄瓜表进行验证 例如|名称|值 | rihan | true | | gihan | true |
对于黄瓜表,我正在使用以下功能将其转换为哈希值
def create_hash_from_data_table table
table.hashes.each do |hash| ; @table_hash = hash ; end
return @table_hash
end
对于实际的JSON响应,我正在使用递归函数将其提取 到以上两个哈希数组[A]和[B],但是我不确定如何合并它们以与黄瓜数据进行比较,而不会覆盖或更改A []和B []中的重复值。
我尝试了合并和递归合并选项 例如array1 = array2.merge(array1)
由于合并方法会引发未定义的方法错误,请提供帮助
答案 0 :(得分:3)
您的问题仍然很令人困惑。我假设您输入以下内容:
a = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
b = [{"value" => 1}, {"value" => 2}, {"value" => 3}]
您想要此输出:
[{"name"=>"rihan", "value"=>1},
{"name"=>"gihan", "value"=>2},
{"name"=>"mihan", "value"=>3}]
可以通过以下方式实现:
a.zip(b).map { |ar| ar.inject(:merge) }
或者在这种特定情况下(压缩后的数组始终为2元素):
a.zip(b).map { |x,y| x.merge(y) }
为
a.zip(b) #=> [[{"name"=>"rihan"}, {"value"=>1}], [{"name"=>"gihan"}, {"value"=>2}], [{"name"=>"mihan"}, {"value"=>3}]]
然后通过合并数组的所有元素来映射数组的每个元素。
或更简单的版本,带有一个简单的循环:
a.size.times.with_object([]) do |i, output|
output << a[i].merge(b[i])
end
答案 1 :(得分:1)
其他选项,通过索引将每个数组中的元素配对:
a.map.with_index { |h, i| h.merge(b[i]) }
a #=> [{"name"=>"rihan", :value=>"true"}, {"name"=>"gihan", :value=>"true"}, {"name"=>"mihan", :value=>"true"}]