2010-07-07 23 views
56

Estoy tratando de encontrar los valores de intersección entre varias matrices.rails - Encontrar intersecciones entre varias matrices

por ejemplo

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

Así, el resultado sería de 2

Sé que en PHP se puede hacer esto con array_intersect

que quería ser capaz de agregar fácilmente matriz adicional por lo que Don 'realmente quiero utilizar múltiples bucles

¿Alguna idea?

Gracias, Alex

Respuesta

89

Utilice el método & de Array que es para intersección de conjuntos.

Por ejemplo:

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

@Anurag ¿Estás seguro de que esto funciona? A menos que malinterprete los requisitos de OP, las primeras y las últimas matrices no se prueban una contra la otra para la intersección. Por ejemplo, '[1,2,3] & [4,5,6] & [1,2,3]' devuelve una matriz vacía. – Noz

+0

@Cyle debe existir cualquier elemento en el resultado de una intersección de tres vías en los tres operandos. Ver http://en.wikipedia.org/wiki/Intersection_(set_theory) – bdares

34

Si quieres una manera más sencilla de hacer esto con una matriz de matrices de longitud desconocida, puede utilizar la inyección.

> 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 (: &)' no funcionará en 1.9. esto funcionará aunque 'arrays.inject (: '&')' –

+0

'arrays.inject (: &)' funciona para mí en 1.9 (1.9.3p429) – Florent2

Cuestiones relacionadas