"rihan"}, {"name" => "gihan"}, {"name" => "mihan"}] B = [{"value" => "t-6ren">
gpt4 book ai didi

ruby - 将两个哈希数组合并为一个而不更改 Ruby 中的键值对

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:50 25 4
gpt4 key购买 nike

你好我有两个哈希数组如下

A = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
B = [{"value" => "true"}, {"value" => "true"}, {"value" => "true"}]

如何将它们合并到单个哈希数组中 [{"名称"=> "rihan", "值"=> 真"]

因为我需要根据以哈希值转换的竖线分隔的 cucumber 表来验证它们例如 |名称|值 |rihan|真实| |gihan|真|

对于 cucumber 表,我使用下面的函数将其转换为哈希值

def create_hash_from_data_table table
table.hashes.each do |hash| ; @table_hash = hash ; end
return @table_hash
end

对于实际的 JSON 响应,我使用递归函数提取它到上面的两个哈希数组 [A] 和 [B],但我不确定如何合并它们以与 cucumber 数据进行比较而不覆盖或更改 A[] 和 B[] 中的重复值。

我尝试了合并和递归合并选项例如array1 = array2.merge(array1)

请协助合并方法抛出未定义的方法错误

最佳答案

你的问题还是很困惑。我假设您有以下输入:

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

关于ruby - 将两个哈希数组合并为一个而不更改 Ruby 中的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com