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

合并两个哈希数组,同时保留所有不同的值

吕淮晨
2023-03-14

我想将两个哈希数组合并到一个新数组中:

array1 = [{"Name1" => {gender: 'female', nationality: ['german', 'danish']}}]
array2 = [{"Name1" => {gender: 'male', nationality: ['german', 'austrian']}}]

现在这就是我正在寻找的结果:

new_array = [{"Name1" => {gender: ['female', 'male'], nationality: ['german', 'danish', 'austrian']}}]

我在Ruby文档中唯一能找到的合并选项是用另一个散列覆盖重复项。那么如何才能达到我需要的版本呢?

共有2个答案

刘凡
2023-03-14

递归方式:

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"]}}
上官景铄
2023-03-14

您可以将可选的块参数传递给Hash#合并。为重复的密钥调用该块。在块的返回值被使用而不是被覆盖。

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

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

  • 我有两个熊猫数据帧共享一个共同的列名。我想合并公共列名,但保留与第二个dataFrame中的所有不同列,其中公共列名称匹配。下面是两个数据帧的示例: 我希望预期的结果是: 也就是说,当列“A”匹配时,我希望保留I,J,K,L的行,并且不等于“NaN ”,对于DF1中的列也是如此。 我已经尝试了所有的pd.merge选项,但是它们似乎没有做我上面要求的事情。例如, 在“A”上匹配并将所有键保留在左侧

  • 问题内容: 如何合并两个数组(一个带有字符串=>值对,另一个带有int =>值对),同时保留字符串/ int键?它们中的任何一个都不会重叠(因为一个只有字符串,而另一个只有整数)。 这是我当前的代码(这不起作用,因为array_merge用整数键重新索引了数组): 问题答案: 您可以简单地“添加”数组:

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

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null