Em Ruby, arrays (ou vetores) são coleções ordenadas de qualquer objeto, indexadas por números inteiros.
A indexação de arrays começa em 0.
Um índice negativo é considerado relativo ao fim do array, por exemplo: um índice -1 indica o último elemento do array, -2 é o penúltimo elemento, e assim por diante.
Normalmente, os arrays são criados usando a notação [].
Eles podem conter objetos de tipos diferentes.
array = [1, "two", 3.0]
Os elementos de um array podem ser recuperados por seus índices usando o método #[].
Isso retorna o elemento no índice, ou retorna um subarray começando no índice inicial e continuando por um comprimento especificado.
Índices negativos contam de trás para frente a partir do fim do array.
a = [ "a", "b", "c", "d", "e" ]
a[2] #=> "c"
a[6] #=> nil
a[1, 3] #=> [ "b", "c", "d" ]
a[-1] #=> "e"
a[-2] #=> "d"
a[-3, 2] #=> ["c", "d"]
Há vários métodos auxiliares úteis em arrays. Aqui estão alguns dos mais comuns:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.size #=> 8
fibonacci.sum #=> 33
fibonacci.reverse #=> [13, 8, 5, 3, 2, 1, 1, 0]
Em vez de usar laços para iterar sobre coleções, em Ruby usamos enumeração.
A enumeração é o ato de percorrer uma coleção (neste caso, um array) e executar alguma ação em cada objeto. A enumeração é um conceito-chave em Ruby e é usada para coisas como ordenação, agrupamento, mapeamento, redução e muito mais.
Uma enumeração para imprimir cada palavra de um array seria assim:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
Neste exemplo, chamamos o método .each no nosso array e passamos um bloco que recebe um parâmetro (word) e o imprime.
Vamos ver blocos com muito mais profundidade mais adiante na trilha, mas por enquanto pense neles como funções anônimas que podem receber zero ou mais argumentos.
Eles podem ser definidos usando a sintaxe do...end (acima), ou a sintaxe {} (abaixo).
Aqui estão alguns outros exemplos de métodos de array que usam blocos:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number == 6 } #=> false
fibonacci.select { |number| number.odd? } #=> [1, 1, 3, 5, 13]
fibonacci.all? { |number| number < 20 } #=> true
fibonacci.map { |number| number * 2 } #=> [0, 2, 2, 4, 6, 10, 16, 26]
Você adora observar aves e acompanha quantos pássaros visitaram seu jardim nos últimos sete dias.
Você tem cinco tarefas, todas sobre os números de pássaros que visitaram seu jardim.
Para fins de comparação, você sempre mantém por perto uma cópia das contagens da semana passada, que foram: 0, 2, 5, 3, 7, 8 e 4. Implemente o método BirdCount.last_week, que retorna as contagens da semana passada:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Implemente o método BirdCount#yesterday para retornar quantos pássaros visitaram seu jardim ontem. As contagens de pássaros estão ordenadas por dia: o primeiro elemento é a contagem do dia mais antigo e o último é a contagem de hoje.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
Implemente o método BirdCount#total para retornar o número total de pássaros que visitaram seu jardim:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais pássaros visitaram seu jardim.
Implemente o método BirdCount#busy_days para retornar o número de dias movimentados:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
Implemente o método BirdCount#day_without_birds?, que retorna true se houve um dia em que nenhum pássaro visitou o jardim; caso contrário, retorne false:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.