En Ruby la mayoría de las veces se utilizan métodos y el concepto de bloques para recorrer arreglos en lugar de estructuras repetitivas while y for.
El método más común para iterar un arreglo en Ruby se llama each y tiene dos sintaxis para implementarlo.
Veamos las sintaxis para recorrer el arreglo:
arreglo = [10, 5, 25, 4, 3] arreglo.each do |elemento| print elemento, "-" end
Estamos llamando al método each y le pasamos un bloque encerrado entre las palabras claves do y end. En concepto de bloques lo veremos en profundidad más adelante, por ahora tenemos que entender que todo lo que se encuentra encerrado entre do y end se ejecuta por cada elemento que tiene el arreglo.
El bloque tiene acceso en casa iteración o repetición a un elemento del arreglo que se almacena en la variable indicada entre los símbolos |variable|
Si ejecutamos este programa vemos que aparecen todos los elementos del arreglo: 10-5-25-4-3-
Cuando el algoritmo del bloque es muy reducido es común utilizar los símbolos {} en remplazo de las palabras claves do y end.
arreglo = [10, 5, 25, 4, 3]
arreglo.each { |elemento| print elemento, "-" }
Normalmente los bloques de llaves se utilizan en una sola línea.
Definir un arreglo que almacene 5 enteros. Sumar todos sus elementos y mostrar dicha suma, utilizar el método each para recorrerlo.
arreglo = [10, 5, 2, 20, 50]
suma = 0
arreglo.each {|elemento| suma = suma + elemento}
puts "Arreglo completo", arreglo
puts "La suma de sus componentes es #{suma}"
Definimos un arreglo de 5 elementos enteros:
arreglo = [10, 5, 2, 20, 50]
Inicializamos un acumulador en cero:
suma = 0
Llamamos al método each del arreglo y en cada iteración acumulamos el elemento:
arreglo.each {|elemento| suma = suma + elemento}
Finalmente imprimimos el arreglo y el acumulador:
puts "Arreglo completo", arreglo
puts "La suma de sus componentes es #{suma}"
Definir por asignación un arreglo con 8 elementos enteros. Contar cuantos de dichos valores almacenan un valor superior a 100.
arreglo = [10, 200, 30, 400, 50, 34, 1, 67]
cant = 0
arreglo.each do |elemento|
if elemento > 100
cant = cant + 1
end
end
puts "Arreglo completo", arreglo
puts "La cantidad de elementos mayores a 100 es #{cant}"
En cada ejecución del bloque verificamos si el elemento del arreglo es superior a 100, en dicho caso incrementamos un contador en uno:
cant = 0
arreglo.each do |elemento|
if elemento > 100
cant = cant + 1
end
end
ejercicio072.rb
arreglo = [8, 1, 9, 2, 10]
puts "Elementos del arreglo con valores iguales o superiores a 7"
arreglo.each do |elemento|
if elemento >= 7
puts elemento
end
end
ejercicio073.rb
nombres = ["juan", "ana", "marcos", "carlos", "luis"]
cantidad = 0
nombres.each do |elemento|
if elemento.length >= 5
cantidad = cantidad + 1
end
end
puts "Todos los nombres son #{nombres}"
puts "Cantidad de nombres con 5 o mas caracteres: #{cantidad}"
ejercicio074.rb
sueldos = [1000, 2500.54, 1222, 2100, 1333.25]
suma = 0
sueldos.each {|elemento| suma = suma + elemento}
puts "Listado de sueldos: #{sueldos}"
promedio = suma / 5
puts "Promedio de sueldos #{promedio}"
ejercicio075.rb
alturas = []
suma = 0
x = 0
while x < 5
print"Ingrese la altura:"
valor = gets.to_f
alturas << valor
suma = suma + valor
x = x + 1
end
puts "Las alturas ingresadas son #{alturas}"
promedio = suma / 5
puts "El promedio de las alturas es #{promedio}"
altas = 0
bajas = 0
alturas.each do |elemento|
if elemento > promedio
altas = altas + 1
else
if elemento < promedio
bajas = bajas + 1
end
end
end
puts "La cantidad de personas mas bajas al promedio es #{bajas}"
puts "La cantidad de personas mas altas al promedio es #{altas}"