Как мне сделать поэлементное сравнение двух массивов? - PullRequest
13 голосов
/ 19 января 2012

У меня есть два массива:

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

Есть ли в Ruby поэлементный метод сравнения, чтобы я мог сделать что-то вроде этого:

a == b

возвращается:

[1,0,1] или что-то вроде [TRUE,FALSE,TRUE].

Ответы [ 6 ]

19 голосов
/ 19 января 2012

Вот один из способов, о котором я могу подумать.

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

a.zip(b).map { |x, y| x == y } # [true, false, true]
4 голосов
/ 19 января 2012

Вы также можете использовать .collect

a.zip(b).collect {|x,y| x==y }
=> [true, false, true]
3 голосов
/ 19 января 2012
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]]
2 голосов
/ 19 января 2012

Это должно сработать:

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

zip создает один массив пар, состоящий из каждого элемента из обоих массивов в этой позиции. Представьте себе, что склеены два массива рядом.

2 голосов
/ 19 января 2012

Вы можете сделать что-то подобное, чтобы получить именно то, что вы хотите:

[1,2,3].zip([1,4,3]).map { |a,b| a == b }
=> [true, false, true]
0 голосов
/ 19 января 2012

Попробуйте что-то вроде этого:

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

@ пересечение теперь должно быть ['d', 'e'].

Пересечение - возвращает новый массив, содержащий элементы, общие для двух массивов, без дубликатов.

Вы даже можете попробовать некоторые из рубиновых трюков, таких как:

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"]  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...