2012-01-19 29 views

cevap

17

İşte aklıma gelen tek yoludur.

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

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

sup downvote ile birlikte mi? – Anurag

+2

Neden blok parametresindeki yıkımı yapmıyoruz? –

+0

@ JörgWMittag - Dizi argümanlarının imha edilmesinin blokta mümkün olduğunu bilmiyordum. – Anurag

-2

deneyin şey:

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

@intersection şimdi [ 'd', 'e'] olmalıdır.

Kesişim - İki dizide ortak olan ve çoğaltması olmayan öğeleri içeren yeni bir dizi döndürür.

Hatta şu gibi yakut hileler bazı deneyebilirsiniz:

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

Bu OP istediğini dönmez .Yaðlar kullanabilirsiniz. –

2

İstediğiniz tam olarak ne elde etmek böyle bir şey yapabilirsiniz:

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

fermuar her öğe oluşan çiftlerinden biri dizisini oluşturur:

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

Bu hile yapmak gerekir her iki diziden de bu konumda. İki diziyi yan yana yapıştırarak düşünün.

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

öğeye karşılaştırmazip Ruby Array nesnesi yöntem ile elde edilmektedir.

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

Ayrıca

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

'map' yerine' topla'yı kullanabilirsiniz? Vaov! –

+0

'topla ',' map' için basit bir takma addır. [Dizi # toplamak] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-collect) –

İlgili konular