首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并两个散列数组,同时保留所有不同的值

合并两个散列数组,同时保留所有不同的值
EN

Stack Overflow用户
提问于 2014-03-22 19:11:34
回答 2查看 820关注 0票数 1

我想将两个散列数组合并到一个新数组中:

代码语言:javascript
复制
array1 = [{"Name1" => {gender: 'female', nationality: ['german', 'danish']}}]
array2 = [{"Name1" => {gender: 'male', nationality: ['german', 'austrian']}}]

这就是我想要的结果:

代码语言:javascript
复制
new_array = [{"Name1" => {gender: ['female', 'male'], nationality: ['german', 'danish', 'austrian']}}]

我在Ruby文档中可以找到的唯一合并选项是用其他哈希覆盖重复项。那么,我如何才能实现我需要的版本呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-22 19:16:43

可以将可选块参数传递给Hash#merge。对重复的键调用该块。在块的返回值中,将使用而不是被覆盖。

代码语言:javascript
复制
array1 = [{"Name1" => {gender: 'female', nationality: ['german', 'danish']}}]
array2 = [{"Name1" => {gender: 'male', nationality: ['german', 'austrian']}}]

new_array = [{'Name1' => array1[0]['Name1'].merge(array2[0]['Name1']) { |k,o,n|
  Array(o) | Array(n)
}}]
# => [{"Name1"=>
#       {:gender=>["female", "male"],
#        :nationality=>["german", "danish", "austrian"]}}]
票数 3
EN

Stack Overflow用户

发布于 2014-03-22 19:24:53

递归方式:

代码语言:javascript
复制
array1 = [{"Name1" => {gender: 'female', nationality: ['german', 'danish']}}]
array2 = [{"Name1" => {gender: 'male', nationality: ['german', 'austrian']}}]

def merge_recur(ar1,ar2)
  (ar1+ar2).inject do |h1,h2|
    h1.merge(h2) do |k,o,n|
      if o.is_a?(Hash) and n.is_a?(Hash)
        merge_recur([o],[n])
      elsif o.is_a?(Array) and n.is_a?(Array)
        o | n
      else
        [o,n]
      end
    end
  end
end

merge_recur(array1,array2)
# => {"Name1"=>
#      {:gender=>["female", "male"],
#       :nationality=>["german", "danish", "austrian"]}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22582238

复制
相关文章

相似问题

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