首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个哈希数组合并为一个,而不更改Ruby中的键值对

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

Stack Overflow用户
提问于 2018-11-08 16:19:00
回答 2查看 169关注 0票数 1

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

代码语言:javascript
复制
A = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
B = [{"value" => "true"}, {"value" => "true"}, {"value" => "true"}]

如何将它们合并为{“名称”“=> "rihan”值“”=> true“的单个散列数组

因为我需要对照以散列格式转换的以管道分隔的黄瓜表来验证它们,例如,在散列中转换的cucumber表,例如:name值\rihan=true,rihan,true,gihan,gihan,true。

对于黄瓜表,我使用下面的函数将其转换为散列。

代码语言:javascript
复制
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)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-08 16:51:49

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

代码语言:javascript
复制
a = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
b = [{"value" => 1}, {"value" => 2}, {"value" => 3}]

你想要这个输出:

代码语言:javascript
复制
[{"name"=>"rihan", "value"=>1},
 {"name"=>"gihan", "value"=>2},
 {"name"=>"mihan", "value"=>3}]

这可以通过以下方式实现:

代码语言:javascript
复制
a.zip(b).map { |ar| ar.inject(:merge) }

或者在这种特殊情况下(在这种情况下,压缩后的数组总是2元素):

代码语言:javascript
复制
a.zip(b).map { |x,y| x.merge(y) }

作为

代码语言:javascript
复制
a.zip(b) #=> [[{"name"=>"rihan"}, {"value"=>1}], [{"name"=>"gihan"}, {"value"=>2}], [{"name"=>"mihan"}, {"value"=>3}]]

然后,通过合并数组的所有元素来映射数组的每个元素。

或者更显式的版本,有一个简单的循环:

代码语言:javascript
复制
a.size.times.with_object([]) do |i, output|
  output << a[i].merge(b[i])
end
票数 3
EN

Stack Overflow用户

发布于 2018-11-08 17:08:19

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

代码语言:javascript
复制
a.map.with_index { |h, i| h.merge(b[i]) }

a #=> [{"name"=>"rihan", :value=>"true"}, {"name"=>"gihan", :value=>"true"}, {"name"=>"mihan", :value=>"true"}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53211869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档