2010-07-07 23 views
56

Birden çok dizi arasındaki kesişim değerlerini bulmaya çalışıyorum. Örneğinraylar - Birden fazla dizi arasındaki kesişimleri bulma

code1 = [1,2,3] 
code2 = [2,3,4] 
code3 = [0,2,6] 

için

Yani sonuç PHP biliyorum 2

ben kolayca ben yani don ek diziyi eklemek mümkün istedim array_intersect

ile yapabilirsiniz olurdu Gerçekten çoklu döngüler kullanmak istemiyorum

Herhangi bir fikrin var mı?

sayesinde Alex

cevap

89

kullanımlar grubu kesişme için Array arasında & yöntemi. Örneğin

:

> [1,2,3] & [2,3,4] & [0,2,6] 
=> [2] 
+0

@Anurag Bunun işe yaradığından emin misiniz? OP'nin gereksinimlerini yanlış anlamadığım sürece, ilk ve son diziler kesişme için bir diğerine karşı test edilmez. Ör., [1,2,3] ve [4,5,6] & [1,2,3] 'boş bir dizi döndürür. – Noz

+0

@Cyle Üç yollu kavşak sonucu herhangi bir öğe üç işlenenin tamamında mevcut olmalıdır. Bkz. Http://en.wikipedia.org/wiki/Intersection_(set_theory) – bdares

34

Eğer daha basit bir yolu uzunluğu bilinmeyen diziler dizisi ile bunu istiyorsanız, enjekte kullanabilirsiniz.

> arrays = [code1,code2,code3] 
> arrays.inject(:&)     # Ruby 1.9 shorthand 
=> [2] 
> arrays.inject{|codes,x| codes & x } # Full syntax works with 1.8 and 1.9 
=> [2] 
+0

'arrays.inject (: &)' 1.9'da çalışmayacaktır. Bu arrays.inject (: '&') ' –

+0

' arrays.inject (: &) '1.9 (1.9.3p429) için benim için çalışıyor olsa da çalışır – Florent2

İlgili konular