如何对两个数组进行逐元素比较?

时间:2012-01-19 07:09:41

标签: ruby arrays comparison

我有两个数组:

a = [1,2,3]
b = [1,4,3]

Ruby中是否存在元素比较方法,以便我可以执行以下操作:

a == b

返回:

[1,0,1]或类似[TRUE,FALSE,TRUE]

6 个答案:

答案 0 :(得分:19)

这是我能想到的一种方式。

a = [1, 2, 3]
b = [1, 4, 3]

a.zip(b).map { |x, y| x == y } # [true, false, true]

答案 1 :(得分:4)

您也可以使用.collect

a.zip(b).collect {|x,y| x==y }
=> [true, false, true]

答案 2 :(得分:3)

a = [1,2,3]
b = [1,4,3]
a.zip(b).map { |pair| pair[0] <=> pair[1] }
=> [0, -1, 0]

元素比较是使用zip Ruby Array对象方法实现的。

a = [1,2,3]
b = [1,4,3]
a.zip(b)
=> [[1, 1], [2, 4], [3, 3]]

答案 3 :(得分:2)

你可以做这样的事情来得到你想要的东西:

[1,2,3].zip([1,4,3]).map { |a,b| a == b }
=> [true, false, true]

答案 4 :(得分:2)

这应该可以解决问题:

array1.zip(array2).map { |a, b| a == b }

zip创建一个对数组,由该位置的两个数组中的每个元素组成。想象一下,将两个阵列并排粘在一起。

答案 5 :(得分:-2)

尝试这样的事情:

@array1 = ['a', 'b', 'c', 'd', 'e']
@array2 = ['d', 'e', 'f', 'g', 'h']
@intersection = @array1 & @array2

@intersection现在应该是['d','e']。

Intersection - 返回一个新数组,其中包含两个数组共有的元素,没有重复项。

您甚至可以尝试以下一些红宝石技巧:

array1 = ["x", "y", "z"]  
array2 = ["w", "x", "y"]  
array1 | array2 # Combine Arrays & Remove Duplicates(Union)  
=> ["x", "y", "z", "w"]  

array1 & array2  # Get Common Elements between Two Arrays(Intersection)  
=> ["x", "y"]  


array1 - array2  # Remove Any Elements from Array 1 that are 
                 # contained in Array 2 (Difference)  
=> ["z"]