Ruby: массив, содержащийся в массиве, любой порядок [дубликат]

17

Предположим, у меня есть следующий код Ruby:

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

В основном я искал some_function , чтобы вернуть True, когда параметр 2 содержит все элементов в параметре 1.

    
задан Mike 09.10.2010 в 21:19
источник

3 ответа

42
def f a,b
    (a-b).empty?
end
    
ответ дан Nakilon 09.10.2010 в 21:21
источник
  • Отлично. Спасибо! –  Mike 09.10.2010 в 21:34
  • Это то, что мне нравится в Ruby - настолько кратким, понятным и понятным. –  the Tin Man 09.10.2010 в 22:08
  • Viva Ruby ...: D –  Hady Elsahar 31.12.2012 в 10:10
1

Из предыдущего сообщения

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

не будет работать так, как вы ожидаете, например:

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

(a1-a2).empty? # returns true

однако,

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

, поэтому f возвращает false.

Более точное решение, если вы хотите, чтобы один лайнер был:

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

a&b вернет все элементы, которые находятся в a и b , затем мы проверим, соответствует ли это b

Для двусмысленности:

def f a,b
    (a&b == a) || (a&b == b)
end
    
ответ дан Iggloo Dev 14.10.2015 в 23:32
источник
  • Это связано с тем, что вы должны поместить большой массив в первую очередь. Автор действительно спрашивает, является ли массив a подмножеством b. Очевидно, что в вашем примере a1 не является подмножеством a2 –  Nick Roz 12.09.2016 в 20:52
  • a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; a2 = [2, 3, 5, 9]; (A1-a2) .empty? # => возвращает false !! ; Я сделал что-то не так или сделал? –  Djunzu 15.10.2017 в 22:37
-2
def f a,b
    tmp  = a.map(|i| b.include?(i))
    tmp.include?(false)
end
    
ответ дан Hady Elsahar 31.12.2012 в 10:09
источник