2012-04-19 30 views
37

Si quiero comparar dos matrices y crear una cadena de salida interpolada si existe una variable de matriz de la matriz y en x ¿cómo puedo obtener una salida para cada elemento coincidente?Buscar valores en común entre dos matrices

Esto es lo que estaba intentando pero no obtengo el resultado.

x = [1, 2, 4] 
y = [5, 2, 4] 
x.each do |num| 
    puts " The number #{num} is in the array" if x.include?(y.each) 
end #=> [1, 2, 4] 

Respuesta

96

Se puede utilizar el método de intersección de conjuntos & para ello:

x = [1, 2, 4] 
y = [5, 2, 4] 
x & y # => [2, 4] 
salida
+0

buena y simple solución gracias. – sayth

+1

Este método también funciona para más de dos matrices. Sin embargo, todas las matrices deben contener el término deseado. – Tommyixi

+0

¿funcionará esto si los índices no son los mismos para el mismo valor? – jacoballenwood

16
x = [1, 2, 4] 
y = [5, 2, 4] 
intersection = (x & y) 
num = intersection.length 
puts "There are #{num} numbers common in both arrays. Numbers are #{intersection}" 

Will:

There are 2 numbers common in both arrays. Numbers are [2, 4] 
2

OK, por lo que el operador & que parece ser el único tienes que hacer para obtener esta respuesta.

Pero antes de que supiera que escribí un parche mono rápida a la clase de matriz para hacer esto:

class Array 
    def self.shared(a1, a2) 
    utf = a1 - a2 #utf stands for 'unique to first', i.e. unique to a1 set (not in a2) 
    a1 - utf 
    end 
end 

El operador & es la respuesta correcta aquí, sin embargo. Mas elegante.

Cuestiones relacionadas