当前位置: 首页 > 知识库问答 >
问题:

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

洪知
2023-03-14

嗨,我有两个哈希数组,如下所示

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

如何将它们合并到单个哈希数组中作为〔{“name”=

因为我需要根据哈希转换的管道分隔cucumber表来验证它们,例如|name|value|rihan|true||gihan|true|

对于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)

请提供帮助,因为合并方法抛出未定义的方法错误

共有2个答案

庾君博
2023-03-14

其他选项,按索引对每个数组中的元素进行配对:

a.map.with_index { |h, i| h.merge(b[i]) }

a #=> [{"name"=>"rihan", :value=>"true"}, {"name"=>"gihan", :value=>"true"}, {"name"=>"mihan", :value=>"true"}]
苍阳成
2023-03-14

你的问题仍然很令人困惑。我假设你有这个输入:

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
 类似资料:
  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 寻找一种优雅的方式以特殊的方式合并两个散列数组: 如果名称关键字匹配,则结果必须包含< code>new_data的所有名称散列,仅包含< code>old_data的额外数据。 我的第一次尝试是这样的,但是它创建了一个额外的散列:

  • 我有两个哈希数组: 我想在< code>a2中找到其< code>ID和< code>name字段与< code>a1中条目的< code>ID和< code>name字段相匹配的散列(不考虑< code>email或任何其他进入< code>a2的项目),然后将< code>ORDER_NO的值合并到< code>a1散列中也就是说,以下列方式结束: 我也想忽略 a2 中存在的元素,但不忽略 a

  • 我有 2 个数组: 我希望array1元素成为新Hash中的键,array2元素成为同一个Hash中相应的值。有人能建议一下怎么做吗? 谢谢

  • 问题内容: 我可以使用通用的特定于Javascript / Coffeescript的习惯用法吗?主要出于好奇。 我有两个数组,一个数组由所需的键组成,另一个数组由所需的值组成,我想将其合并到一个对象中。 问题答案: var r = {}, i, keys = [‘one’, ‘two’, ‘three’], values = [‘a’, ‘b’, ‘c’];

  • 所以,我有一个带有数组的哈希,就像这样: 我想将它们合并到一个哈希数组中,组合相应的元素。 结果应该是这样的: 知道如何有效地做到这一点吗? 请注意,真实世界的使用场景可能包含数量可变的散列键。