Arrays en Ruby
Un Array es sólo una lista de elementos en orden (como mangos, manzanas y naranjas).
Cada lugar en la lista actúa como una variable: puedes ver a que objeto un lugar en
particular hace referencia y puedes hacerlo que apunte hacia otro objeto diferente.
Puedes crear un array usando corchetes “[]”. Observa el programa p018arrays.rb con
atención.
1 # Arrays 2 3 # Un array vacio 4 var1 = [] 5 # El indice de los arrays comienza en cero 6 puts var1[0] 7 8 # un array que contiene un solo numero 9 var2 = [5] 10 puts var2[0] 11 12 # un array que contiene dos cadenas 13 var3 = ['Hola', 'Adios'] 14 puts var3[0] 15 puts var3[1] 16 17 sabor = 'mango' 18 # un array cuyos elementos hacen referncia o tres 19 # objetos diferentes, un numero decimal (float), una cadena y otro array 20 var4 = [80.5, sabor, [true, false]] 21 puts var4[2] 22 23 # una coma al final de los elementos de un array es ignorada 24 nombre = ['Juan', 'Alvarez', 'Ruby', 'Lisp',] 25 puts nombre[0] 26 puts nombre[1] 27 puts nombre[2] 28 puts nombre[3] 29 # la siguiente expresion regresa nil 30 # nil es la manera que tiene Ruby de decir 'nada' 31 puts nombre[4] 32 # podemos agregar mas elementos 33 nombre[4] = 'Morelia' 34 puts nombre[4] 35 # podemos agregar lo que sea al array! 36 nombre[5] = 4.33 37 puts nombre[5] 38 # podemos incnluso agregar un array a otro array 39 nombre[6] = [1, 2, 3] 40 puts nombre[6] 41 42 # algunos metodos de los arrays 43 un_array = [45, 23, 1, 90] 44 puts un_array.sort 45 puts un_array.length 46 puts un_array.first 47 puts un_array.last 48 49 # el metodo each (un iterador) extrae cada elemento del array y lo pasa como 50 # parametro a un bloque 51 # la variable leng hace referencia a cada elemento del array en cada iteracion del loop 52 lenguajes = ['Mandarin', 'Aleman', 'Ruso'] 53 54 lenguajes.each do |leng| 55 puts 'A mi me gustaría hablar ' + leng + '!' 56 puts 'A ti no?' 57 end 58 59 # si eliminas un elemento en la mitad del array, los elementos restantes 60 #son reubicados 61 lenguajes.delete('Aleman') 62 lenguajes.each do |leng| 63 puts 'A mi me gustaría hablar ' + leng + '!' 64 puts 'A ti no?' 65 end
El método each (para cualquier objeto que lo defina) nos permite hacer algo (lo que
nosotros queramos) a cada uno de los objetos a los que el array haga referencia.
En el ejemplo, podemos tener acceso a cada uno de los objetos del array sin necesidad
de usar números. Aquí hay algunos puntos que tomar en cuenta:
- La variable
lengque aparece en medio de dos barras verticales hace referencia a un elemento diferente del array cada vez que hace una iteración. Puedes darle cualquier nombre a esta variable. - Las palabras
doyendidentifican un bloque de código que va a ser ejecutado para cada elemento. Los bloques son muy usados en Ruby y vamos a dedicarles tiempo más adelante.
El siguiente es un ejemplo interesante de un método que regresa un array (p019mtdarry.rb)
1 # si le asignas a return mas de un parametro, 2 # el metodo los regresa en un arrayo 3 # El metodo times de la clase Integer efectua num 4 # iteraciones del bloque pasando valores desde cero hasta num-1 5 # como parametrospassing in values from zero to num-1 6 7 def mtdarry 8 10.times do |num| 9 cuadrado = num * num 10 return num, cuadrado if num > 5 11 end 12 end 13 14 # usando asignacion en paralelo podemos obtener los valores que 15 # regresa el metodo 16 num, cuadrado = mtdarry 17 puts num 18 puts cuadrado
El resultado es:
El método times de la clase Integer efectúa num iteraciones del bloque, pasando
valores desde cero hasta num-1 como parámetros. Como puedes ver, si return recibe
más de un parámetro, el método los regresa en un array. Puedes usar asignación en
paralelo para recolectar los valores de retorno.
Ruby tiene arrays asociativos como awk? Si, los Hashes (también conocidos como
arrays asociativos, mapas o diccionarios) están disponibles en Ruby.
Documentación completa de la clase Array
Tarea:-
Escribe un programa (
p020arraysum.rb) que calcule la suma de los elementos del array [1,2,3,4,5] -
Escribe un programa(
p021parimpar.rb) que identifique si los elementos del array [12,23,456,123,4579] son pares o impares.
Resumen
Revisa el resumen de los puntos importantes que necesitas recordar después de haber completado los temas: Ruby method_missing, Mas acerca de las cadenas, Estructuras Simples y Arrays en Ruby.