2010-10-09 14 views
17

Supongamos que tengo el siguiente código Ruby:Rubí: Array contenida en Array, cualquier orden

array_1 = ['a', 'b'] 
array_2 = ['a', 'b', 'c'] 

some_function(array_1, array_2) # => True 
some_function(array_2, array_1) # => False 
some_function(['a', 'b'], ['a', 'd']) # => False 
some_function(['x', 'y'], array_2) # => False 

estoy más o menos en busca de some_function para devolver True cuando Parámetro 2 contiene todo de los elementos en el parámetro 1 .

Respuesta

42
def f a,b 
    (a-b).empty? 
end 
+0

excelente. ¡Muchas gracias! – Mike

+5

Esto es lo que me gusta de Ruby: tan conciso, sensato y legible. –

+0

Viva Ruby ...: D –

-2
def f a,b 
    tmp = a.map(|i| b.include?(i)) 
    tmp.include?(false) 
end 
1

De un post anterior,

def f a,b 
    (a-b).empty? 
end 

no va a funcionar de la forma esperada, por ejemplo:

a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
a2 = [2, 3, 5, 9] 

(a1-a2).empty? # returns true 
embargo

,

a1-a2 # returns [1, 4, 6, 7, 8], not empty 

por lo tanto f vuelve falsa.

Una solución más precisa, si quieres una sola línea sería:

def f a,b 
    a&b == b 
end 

a&b devolverá todos los elementos que se encuentran en ambos a y b continuación, comprobamos para ver si es igual a b

Por el amor ambigüedad:

def f a,b 
    (a&b == a) || (a&b == b) 
end 
+0

Esto se debe a que deberías poner una matriz más grande en primer lugar. El autor realmente pregunta si la matriz 'a' es un subconjunto de' b'. Obviamente, en su ejemplo 'a1' no es un subconjunto de' a2' –

+0

'a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]'; 'a2 = [2, 3, 5, 9]'; '(a1-a2) .empty?' # => Devuelve 'false' !! ; ¿Hice algo mal o no? – Djunzu