让我们说我有两个由哈希组成的数组,结构类似:
array = [{:name => "John",
:surname => "Smith",
:family => {:mom => "Cathy",
:father => "Joe"}
},{:name => "Kevin",
:surname => "Smith",
:family => {:mom => "Jessica",
:father => "Bob"}
}]
如果这两个数组在数组中都有大约10000个元素/人(哈希),那么比较两个数组的最佳和最快的方法是什么?
第二个数组中的哈希值可能与第一个数组中的哈希值不同,但如果元素相同则数组相等。 此外,比较应该能够找出差异(如果有的话),不仅表明它们不相等。
提前致谢
答案 0 :(得分:3)
diff = (array1 - array2) + (array2 - array1)
equality = diff.empty?
答案 1 :(得分:0)
require 'set'
def compare(array1, array2)
s1, s2 = array1.to_set, array2.to_set
if (s1 == s2)
puts "arrays are equal"
else
puts "elements in array1 not in array 2: #{(s1-s2).to_a}" unless (s1-s2).empty?
puts "elements in array2 not in array 1: #{(s2-s1).to_a}" unless (s2-s1).empty?
end
end
a1 = [{ a: 1, b: 2 }, { b: 1, a: 2 }]
a2 = [{ a: 2, b: 1 }, { b: 2, a: 1 }]
a3 = [{ a: 2, b: 1 }, { b: 0, a: 1 }]
compare(a1, a2)
#=> arrays are equal
compare(a1, a3)
#=> elements in array1 not in array 2: [{:a=>1, :b=>2}]
#=> elements in array2 not in array 1: [{:b=>0, :a=>1}]
(s1-s2).to_a
和(s2-s1).to_a
比array1-array2
和array2-array1
快得多,但这并不能解释创建这两套的开销。总的来说,我不知道使用集合或使用数组差异是否更快。