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 leng que 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 do y end identifican 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:

Arrays

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.