【问题标题】:Merge two hash arrays into one without changing Key value pairs in Ruby将两个哈希数组合并为一个而不更改 Ruby 中的键值对
【发布时间】:2019-04-12 04:55:40
【问题描述】:

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

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

如何将它们合并到单个哈希数组中 [{"name" => "rihan", "value" => true"]

因为我需要根据管道分隔的黄瓜表来验证它们,这些表用哈希值转换 例如|名称|值 |rihan|真| |gihan|真|

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

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)

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

【问题讨论】:

  • 你能用实际的 Ruby 代码表达吗?这有助于我们测试解决方案。
  • @tadman 用 ruby​​ 代码更新了问题
  • 这不是 Ruby 代码。 a = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}] 是你的意思吗?
  • @MarcinKołodziej 是的,很抱歉。我会在问题中更新它

标签: ruby hash


【解决方案1】:

您的问题仍然很混乱。我假设你有这个输入:

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

【讨论】:

  • 谢谢 Marcin,我会试一试的。
【解决方案2】:

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

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

a #=> [{"name"=>"rihan", :value=>"true"}, {"name"=>"gihan", :value=>"true"}, {"name"=>"mihan", :value=>"true"}]

【讨论】:

  • iGian,我遇到了合并问题,但您之前的回答对我有用。感谢您的帮助
猜你喜欢
  • 2017-12-18
  • 2011-02-21
  • 2016-10-26
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
相关资源
最近更新 更多