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 como relativo al 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.
Normalmente, los arrays se crean con la notación [].
Pueden contener objetos de cualquier tipo.
array = [1, "two", 3.0]
Los elementos de un array se pueden recuperar por su índice con el método #[].
Esto devuelve el elemento en el índice indicado, 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 consiste en recorrer una colección (en este caso, un array) y realizar alguna acción sobre 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 sería así:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
En este ejemplo, hemos llamado al método .each en nuestro array y le hemos pasado 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 aficionado a la observación de aves que lleva la cuenta de cuántos pájaros han visitado tu jardín en los últimos siete días.
Tienes cinco tareas, todas relacionadas con el número de pájaros que han visitado tu jardín.
Para poder comparar, siempre tienes a mano una copia de los recuentos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Implementa el método BirdCount.last_week, que devuelve los recuentos de la semana pasada:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
Implementa el método BirdCount#yesterday para que devuelva cuántos pájaros visitaron tu jardín ayer. Los recuentos de pájaros están ordenados por días, donde el primer elemento es el recuento del día más antiguo y el último elemento es el recuento 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 pájaros 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 ajetreados que otros. Un día ajetreado es aquel en el que cinco o más pájaros han visitado tu jardín.
Implementa el método BirdCount#busy_days para que devuelva el número de días ajetreados:
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 algún día en el que ningún pájaro visitó el jardín; en caso 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.