当前位置:  开发笔记 > 编程语言 > 正文

比较具有相同键的两个哈希数组

如何解决《比较具有相同键的两个哈希数组》经验,为你挑选了1个好方法。

我有2个具有相同键但不同值的哈希数组.

A = [{:a=>1, :b=>4, :c=>2},{:a=>2, :b=>1, :c=>3}]
B = [{:a=>1, :b=>1, :c=>2},{:a=>1, :b=>3, :c=>3}]

我试图将A中的第一个哈希与B中的第一个哈希进行比较,依此类推,使用它们的密钥并确定哪个密钥与哪个值不匹配(如果它们不匹配).请帮忙.

    A.each_key do |key|
      if A[key] ==  B[key]
        puts "#{key} match"
      else
        puts "#{key} dont match"

Cary Swovela.. 5

我不确定你想要做哪些比较,所以我将展示回答不同问题的方法.你想对两个哈希数组进行成对比较,但这并不比仅仅比较两个哈希更困难,我稍后会说明.现在,假设你只想比较两个哈希:

h1 = {:a=>1, :b=>4, :c=>2, :d=>3 }
h2 = {:a=>1, :b=>1, :c=>2, :e=>5 }

什么键h1h2(或两者)?

h1.keys | h2.keys
  #=> [:a, :b, :c, :d, :e]

请参见数组#| .

两个哈希中有哪些键?

h1.keys & h2.keys
  #=> [:a, :b, :c] 

见数组#&.

什么键在h1但不是h2

h1.keys - h2.keys
  #=> [:d] 

请参阅数组# -.

什么键在h2但不是h1

h2.keys - h1.keys #=> [:e] 

一个哈希中只有哪些键?

(h1.keys - h2.keys) | (h2.keys - h1.keys)
  #=> [:d, :e]

要么

(h1.keys | h2.keys) - (h1.keys & h2.keys)

两个哈希中有哪些键并且在两个哈希中具有相同的值?

(h1.keys & h2.keys).select { |k| h1[k] == h2[k] }
  #=> [:a, :c] 

请参见Array#select.

两个哈希中的哪些键都有,并且在两个哈希中具有不同的值?

(h1.keys & h2.keys).reject { |k| h1[k] == h2[k] }
  #=> [:b] 

假设现在我们有两个哈希数组:

a1 = [{:a=>1, :b=>4, :c=>2, :d=>3 }, {:a=>2, :b=>1, :c=>3, :d=>4}]
a2 = [{:a=>1, :b=>1, :c=>2, :e=>5 }, {:a=>1, :b=>3, :c=>3, :e=> 6}]

并希望成对地比较哈希.要做到这一点,首先采取上面的兴趣计算,并将其包装在一个方法中.例如:

def keys_in_both_with_different_values(h1, h2)
  (h1.keys & h2.keys).reject { |k| h1[k] == h2[k] }
end

然后写:

a1.zip(a2).map { |h1,h2| keys_in_both_with_different_values(h1, h2) }
  #=> [[:b], [:a, :b]]

请参阅Enumerable#zip.



1> Cary Swovela..:

我不确定你想要做哪些比较,所以我将展示回答不同问题的方法.你想对两个哈希数组进行成对比较,但这并不比仅仅比较两个哈希更困难,我稍后会说明.现在,假设你只想比较两个哈希:

h1 = {:a=>1, :b=>4, :c=>2, :d=>3 }
h2 = {:a=>1, :b=>1, :c=>2, :e=>5 }

什么键h1h2(或两者)?

h1.keys | h2.keys
  #=> [:a, :b, :c, :d, :e]

请参见数组#| .

两个哈希中有哪些键?

h1.keys & h2.keys
  #=> [:a, :b, :c] 

见数组#&.

什么键在h1但不是h2

h1.keys - h2.keys
  #=> [:d] 

请参阅数组# -.

什么键在h2但不是h1

h2.keys - h1.keys #=> [:e] 

一个哈希中只有哪些键?

(h1.keys - h2.keys) | (h2.keys - h1.keys)
  #=> [:d, :e]

要么

(h1.keys | h2.keys) - (h1.keys & h2.keys)

两个哈希中有哪些键并且在两个哈希中具有相同的值?

(h1.keys & h2.keys).select { |k| h1[k] == h2[k] }
  #=> [:a, :c] 

请参见Array#select.

两个哈希中的哪些键都有,并且在两个哈希中具有不同的值?

(h1.keys & h2.keys).reject { |k| h1[k] == h2[k] }
  #=> [:b] 

假设现在我们有两个哈希数组:

a1 = [{:a=>1, :b=>4, :c=>2, :d=>3 }, {:a=>2, :b=>1, :c=>3, :d=>4}]
a2 = [{:a=>1, :b=>1, :c=>2, :e=>5 }, {:a=>1, :b=>3, :c=>3, :e=> 6}]

并希望成对地比较哈希.要做到这一点,首先采取上面的兴趣计算,并将其包装在一个方法中.例如:

def keys_in_both_with_different_values(h1, h2)
  (h1.keys & h2.keys).reject { |k| h1[k] == h2[k] }
end

然后写:

a1.zip(a2).map { |h1,h2| keys_in_both_with_different_values(h1, h2) }
  #=> [[:b], [:a, :b]]

请参阅Enumerable#zip.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有