2014-12-11 3 views
0

Я делаю текстовую игру, и когда вы доберетесь до последней двери, она заблокирована. Вам нужно три элемента (строки в массиве).Ruby - Проверка наличия нескольких значений в любом массиве

Итак, я пытаюсь сделать заявление if, чтобы узнать, содержит ли ваш инвентарь (который может нести три предмета, а также другие) эти три элемента, расположенные где угодно.

array1 = ["key1", "key2", "key3", "sword", "dagger"] 
array2 = ["key1", "key2", "key3"] 

if array1.include? array2 
    puts "it does" 
else 
    puts "it doesn't" 
end 

Я пробовал такие вещи, как с помощью любого и включают в себя, но я не могу придумать простое решение о том, как я хотел бы сделать это, как мои тесты показали неожиданные результаты.

Спасибо.

+0

@CarySwoveland дал вам отличный ответ, но вы рассмотрели хранение инвентаризации в 'Hash' например 'inventory = {keys: [" key1 "," key2 "," key3 "], оружие: [" меч "," кинжал "]}', тогда это будет так же просто, как 'inventory [: keys] == array2' , Это также добавило бы в функциональность игры, классифицировав такие вещи, как ключи, оружие и многие другие предметы. – engineersmnky

+0

@engineersmnky - Хорошая идея! Я не попал в хэш-часть учебного пути, поэтому я обязательно проверю это, кажется, лучший способ пойти. Кроме того, я сделал так, что в этой истории я достал часть оружия, поэтому он полагается исключительно на предметы. – jimps

ответ

3

Вы можете использовать массив перекресток:

array1 = ["key1", "key2", "key3", "sword", "dagger"] 
array2 = ["key1", "key2", "key3"] 

puts (array1 & array2 == array2) ? "it does" : "it doesn't" 
    #=> "it does" 

array2 = ["key1", "key2", "cat"] 
puts (array1 & array2 == array2) ? "it does" : "it doesn't" 
    #=> "it doesn't" 

или разница:

puts (array2 - array1).empty? ? "it does" : "it doesn't" 
+0

Спасибо, я использовал этот метод и внедрил его. Теперь они могут пройти через дверь с предметами, но отвергнуты, если они этого не сделают. Также у меня есть немного больше работы с массивами :) – jimps

Смежные вопросы