| lang | RU |
|---|---|
| title | Все вместе |
| answer | ^4$ |
| ok | Ага, Шекспир написал 4 пьесы в 1591 |
| error | Ответ должен быть 4. Проверьте аргумент метода count_plays |
| load | prev |
Теперь предположим, что мы хотим знать имена и количество пьес, написанных Шекспиром в течение определенного года.
Ruby позволяет нам выводить значения из словаря. Метод select использует блок, который позволяет нам определить, что выбрать и вернуть найденное.
Затем мы можем использовать результаты, возвращаемые select в методе each, как и раньше, просто добавляя его после блока выбора. Это еще один пример цепочки методов, который мы видели раньше, когда делали стихотворение задом наперед.
Я подготовил метод count_plays для вас. Посмотрим, сможете ли вы посчитать количество пьес, написанных Шекспиром в 1591:
def count_plays(year)
s = get_shakey
s["William Shakespeare"]
.select { |k, v|
v["finished"] == year
}.each { |key, val|
puts val["title"]
}.count
end
puts count_plays(1591)
Вы заметили, что я добавил метод count в самом конце всего метода. Так мы получим возвращаемое значение метода count_plays.
Есть и другой способ выстраивания цепочки. Видите одинокую строчку s = get_shakey. Вы можете добавить ["William Shakespeare"].select { |k, v| в конец get_shakey (не обязательно здесь).