Подтвердить что ты не робот

Как мне по элементарному сопоставлению двух массивов?

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

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

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

a == b

возвращает:

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 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]]

Ответ 4

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

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

Ответ 5

Это должно сделать трюк:

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

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

Ответ 6

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

@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"]