Skip to content

Latest commit

 

History

History
41 lines (32 loc) · 1.47 KB

File metadata and controls

41 lines (32 loc) · 1.47 KB
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).