En Ruby, los arrays son colecciones ordenadas de cualquier objeto, indexadas por números enteros.
La indexación de los arrays empieza en 0.
Un índice negativo se interpreta en relación con el final del array. Por ejemplo, un índice de -1 indica el último elemento del array, -2 es el penúltimo elemento del array, y así sucesivamente.
Los arrays se crean normalmente con la notación [].
Pueden contener objetos de cualquier tipo.
array = [1, "two", 3.0]
Los elementos de un array se pueden obtener por su índice con el método #[].
Esto devuelve el elemento que está en ese índice, o devuelve un subarray que empieza en el índice inicial y continúa durante una longitud determinada.
Los índices negativos cuentan hacia atrás desde el final del 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"]
Hay muchos métodos auxiliares útiles en los arrays. Aquí tienes algunos de los más comunes:
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]
En lugar de usar bucles para recorrer colecciones, en Ruby usamos la enumeración.
La enumeración es el acto de recorrer una colección (en este caso, un array) y realizar alguna acción con cada objeto. La enumeración es un concepto clave en Ruby y se usa para cosas como ordenar, agrupar, mapear, reducir y mucho más.
Una enumeración para imprimir cada palabra de un array se vería así:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
En este ejemplo, llamamos al método .each en nuestro array y le pasamos un bloque que recibe un parámetro (word) y lo imprime.
Veremos los bloques con mucho más detalle más adelante en el Track, pero por ahora piensa en ellos como funciones anónimas que pueden recibir cero o más argumentos.
Se pueden definir con la sintaxis do...end (arriba) o con la sintaxis {} (abajo).
Aquí tienes otros ejemplos de métodos de array que usan bloques:
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]
Eres un observador de aves entusiasta que lleva la cuenta de cuántas aves han visitado tu jardín en los últimos siete días.
Tienes cinco tareas, todas relacionadas con la cantidad de aves que visitaron tu jardín.
Para poder comparar, siempre tienes cerca una copia de los conteos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Implementa el método BirdCount.last_week que devuelve los conteos de la semana pasada:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Implementa el método BirdCount#yesterday para que devuelva cuántas aves visitaron tu jardín ayer. Los conteos de aves están ordenados por día: el primer elemento es el conteo del día más antiguo y el último es el conteo de hoy.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
Implementa el método BirdCount#total para que devuelva el número total de aves que han visitado tu jardín:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
Algunos días son más ocupados que otros. Un día ocupado es aquel en el que cinco aves o más han visitado tu jardín.
Implementa el método BirdCount#busy_days para que devuelva el número de días ocupados:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
Implementa el método BirdCount#day_without_birds? que devuelve true si hubo un día en el que cero aves visitaron el jardín; de lo contrario, devuelve false:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.