2012-01-19 11 views

Odpowiedz

17

Oto jeden ze sposobów, że mogę myśleć.

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

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

sup z downvote? – Anurag

+2

Dlaczego zamiast tego należy zamiast tego dokonać destrukturyzacji w parametrze bloku? –

+0

@ JörgWMittag - Nie wiedziałem, że możliwe jest destrukturyzowanie argumentów tablicowych w obrębie bloku. – Anurag

-2

spróbować czegoś takiego:

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

@intersection powinien być [ 'd', 'e'].

Przecięcie-Zwraca nową tablicę zawierającą elementy wspólne dla dwóch tablic, bez duplikatów.

Można nawet spróbować niektóre sztuczki rubinowe jak następuje:

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"] 
+1

nie wrócić, co chciał OP. –

2

można zrobić coś takiego, aby uzyskać dokładnie to, co chcesz:

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

To powinno załatwić sprawę:

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

zip tworzy jedną tablicę par składających się z każdego elementu z obu tablic na tej pozycji. Wyobraź sobie przyklejenie dwóch tablic obok siebie.

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

element mądry porównanie uzyskuje się zip Ruby sposobu przedmiotu macierzy.

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

Można również użyć .collect

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

Możesz użyć 'collect' zamiast' map'? Łał! –

+0

'collect' to po prostu alias dla' map'. [Array # collect] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-collect) –

Powiązane problemy