| lang | PT-BR |
|---|---|
| title | Tudo junto agora |
| answer | ^4$ |
| ok | Sim, Shakespeare escreveu 4 peças em 1591 |
| error | A resposta para o ano 1591 deve ser 4 |
| load | prev |
Agora, suponha que nós desejamos saber apenas os nomes e a quantidade de peças escritas por Shakespeare em um determinado ano.
O Ruby nos permite selecionar (select) valores do hash. O método select usa um bloco para nos deixar definir o que selecionar, e retorna o que for encontrado.
Nós podemos usar o resultado retornado pelo método select no método each simplesmente adicionando-o após o bloco do select. Este é outro exemplo de encadeamento de métodos, que nós vimos antes ao inverter o poema.
Eu preparei o método count_plays (plays significa peças) para você. Veja se você consegue descobrir quantas peças foram escritas por Shakespeare no ano 1591. Tente isso:
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)
Você notou que eu encadeei o método count ao final do método each? Isto nos dá o valor de retorno para o método count_plays.
Existe uma outra possibilidade de encadeamento aqui. Veja esta linha s = get_shakey. Você pode adicionar o ["William Shakespeare"].select { |k, v| ao final do get_shakey (nesse caso, não é preciso colocar o ponto).