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}"