Ищем строку и возвращаем первую строку, которая соответствует набору - PullRequest
0 голосов
/ 02 июля 2019

Плохое название ... нужно подумать, как это перефразировать.Вот что я должен сделать:

Создать метод find_the_cheese, который должен принимать массив строк.Затем следует просмотреть эти строки, чтобы найти и вернуть первую строку, которая является типом сыра.Виды сыров: «Чеддер», «Гауда» и «Камамбер».

Например:

snacks = ["crackers", "gouda", "thyme"]
find_the_cheese(snacks)
#=> "gouda"


soup = ["tomato soup", "cheddar", "oyster crackers", "gouda"]
find_the_cheese(soup)
#=> "cheddar"

Если, к сожалению, список ингредиентов не включает сыр, вернуть nil:

ingredients = ["garlic", "rosemary", "bread"]
find_the_cheese(ingredients)
#=> nil

Можно предположить, что все строки будут строчными.Посмотрите на метод .include для подсказки.Этот метод просит вернуть строковое значение вместо его печати, так что имейте это в виду.

Вот мой код:

def find_the_cheese(array)
  cheese_types = ["cheddar", "gouda", "camembert"]
  p array.find {|a| a == "cheddar" || "gouda" || "camembert"}
end

Полученная ошибка выглядит так, как будто она захватываетпервый элемент в массиве, хотя это не сыры ... кто-то может объяснить, что здесь происходит?Любая помощь, как всегда, ценится.

Это тесты, которые пройдут через нее:

  describe "#find_the_cheese" do
    it "returns the first element of the array that is cheese" do
      contains_cheddar = ["banana", "cheddar", "sock"]
      expect(find_the_cheese(contains_cheddar)).to eq 'cheddar'

      contains_gouda = ["potato", "gouda", "camembert"]
      expect(find_the_cheese(contains_gouda)).to eq 'gouda'
    end

    it "returns nil if the array does not contain a type of cheese" do
      no_cheese = ["ham", "cellphone", "computer"]
      expect(find_the_cheese(no_cheese)).to eq nil
    end
  end
end

Вот ошибка:

  1) Cartoon Collections #find_the_cheese returns the first element of the array that is cheese
     Failure/Error: expect(find_the_cheese(contains_cheddar)).to eq 'cheddar'

       expected: "cheddar"
            got: "banana"

       (compared using ==)
     # ./spec/cartoon_collections_spec.rb:57:in `block (3 levels) in <top (required)>'

1 Ответ

1 голос
/ 02 июля 2019

Это выражение

"cheddar" || "gouda" || "camembert"

всегда возвращает

"cheddar"

это не то, что вы хотите.Вы, вероятно, ищете что-то вроде

def find_the_cheese(array)
  cheese_types = ["cheddar", "gouda", "camembert"]
  array.find { |a| cheese_types.include?(a) }
end

То, что вы хотели написать, было, вероятно,

array.find { |a| a == "cheddar" || a == "gouda" || a == "camembert" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...