Curso de Ruby

Curso de Ruby

Sim贸n Soriano

Sim贸n Soriano

Tipos de datos IV: Arrays

7/39
Recursos

Un array o arreglo es un tipo de datos especial donde vas a poder almacenar m煤ltiples objetos en una sola variable.

Ejemplo:

letras = [ ""q"", ""w"", ""e"", ""r"", ""t"", ""y""]

Algo interesante de Ruby es que podemos utilizar n煤meros negativos para acceder a las posiciones desde el 煤ltimo elemento del array.

Los arreglos en Ruby no tienen un tipo espec铆fico, esto quiere decir que dentro de un array podemos tener diferentes tipos de datos en cada elemento.

Aportes 19

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Si quieren limpiar la consola:

CTRL + L

M茅todos:

  • letras.include? 鈥測鈥 (Devuelve true si incluye dicho elemento)
  • letras.count { |x| x == 鈥測鈥 } (Nos retorna la cantidad de elementos que cumplen dicha condici贸n)
  • [1,2,3,4,5].map { |x| x*2 } (Nos retorna un arreglo modificado seg煤n la condici贸n)
  • [1,2,3,4,5].select { |x| x.even? } (Nos retorna un arreglo con los elementos seleccionados seg煤n la condici贸n)
  • [1,2,3,4,5].min (Nos va a retornar el elemento m谩s peque帽o)
  • [1,2,3,4,5].max (Nos va a retornar el elemento m谩s grande)
  • [1,2,3,4,5].sum (Retorna la suma de todos los elementos del arreglo)
  • 鈥淗ola Mundo鈥.split(" ") (Nos retorna un arreglo con la cadena dentro separada por el elemento dentro del par茅ntesis)
  • [鈥渁鈥, 鈥渂鈥 ,鈥渃鈥漖.join("-") (Retorna los elementos de una matriz en una cadena separada por el elemento dentro del par茅ntesis)
  • letras.sort (Nos retorna una copia ordenada del arreglo)

Hola 鈥 esta bueno explicar para que usan "map"
es para manejar la inmutabilidad de la lista.
Osea, Es una buena practica en todos los lenguajes de programacion ahora modernos no mutar tu array original. Cuando queres trabajar sobre una lista y no modificar tu lista original, sino generar una nueva lista con los changes hechos.

Arrays

Un array (o lista) es un conjunto ordenado: cada posici贸n en la lista es una variable que podemos leer y/o escribir.

    - Un array puede ser un conjunto de elementos distintos
    - Algunas veces, crear arrays de palabras puede ser tedioso debido a tantas comillas y comas. en Ruby podemos hacerlo de la siguiente manera 芦 nombres2 = %w{ ann richard william susan pat }禄 
    - El m茅todo each extrae cada elemento del array dentro de la variable que se le especifique (que ir谩 entra dos barras | |), que se usar谩 en bloque do鈥nd.
    - M茅todo +: Con este m茅todo sumamos arrays. Es decir, le agregamos el contenido de uno al final del otro. 
    - M茅todo 鈥: De la misma manera podemos restar arrays.
    - M茅todo *: Muy parecido podemos multiplicar un array por un n煤mero. 
    - M茅todo '<<': Al ya tener un array podemos agregarle nuevos objetos con el m茅todo
    - M茅todo &:A este m茅todo se le conoce como intersecci贸n por que retorna los elementos comunes de dos arrays sin duplicados.
    
- Conceptos extra铆dos de :
    - http://rubytutorial.wikidot.com/arrays
    - http://www.maestrosdelweb.com/la-clase-array-en-ruby/  

Ordenar los methods: <array>.methods.sort
Porque todo en ruby es un objeto, muy interesante.

Para agregar elementos a un array podemos usar:
push inserta el elemento al final del array:
arr = [1, 2, 3, 4] arr.push(5) #=> [1, 2, 3, 4, 5] arr << 6 #=> [1, 2, 3, 4, 5, 6]
unshift Inserta el elemento al inicio del array:
arr.unshift(0) #=> [0, 1, 2, 3, 4, 5, 6]
insert Agrega un elemento en la posici贸n que queramos:
arr.insert(3, 'apple') #=> [0, 1, 2, 'apple', 3, 4, 5, 6]
nota: el insert nos permite insertar uno o mas elementos dentro del array al mismo tiempo

Pues anda, muy similar a Javascript

Arrays


Un Array es un tipo de dato especial donde vamos a poder almacenar m煤ltiples objectos en una sola varibles

# As铆 escribimos un array
letras = ["a","b","c","d","e","f","g"]

# Para acceder a las posici贸n de cada objeto, lo hacemos como en JS
letras[0]

Algo especial de Ruby es que podemos utilizar n煤meros negativos para acceder a posiciones desde el 煤ltimo elemento en el Array. Si utilizamos un n煤mero que exceda la cantidad de objetos que hay en el Array no mostrar ning煤n resultado.

letras[-1]

Tambi茅n podemos acceder al m茅todo methods con m茅todos

# Para ver que clases de objeto es methods
letras.methods.class

# Para cu谩nto objetos hay dentro de methods
letras.methods.size

Otros m茅todos que podemos utilizar para un Array son:

# Para saber si hay un elemento x dentro del array
letras.include? "a"

# Para saber cu谩l es el primer elemento
letras.first

# Para saber cu谩l es el 煤ltimo elemento
letras.last

Con el m茅todo .count podemos especificar una condici贸n, es como una mini funci贸n, recibe un par谩metro y podemos preguntar algo sobre el par谩metro

# Estamos preguntando cu谩ntos elementos son iguales a "q"
letras.count { |x| x == "q" }

# Estamos preguntando cu谩ntos elementos son pares
[1,2,3,4,5].count { |x| x.even? }

# El m茅todo .map se utiliza para transformar cada uno de los elementos del array
[1,2,3,4,5].map { |x| x*2 }

# El m茅todo .select es equivalente al m茅todo .filter de JS. Se encarga de filtrar algunos elementos que cumplan con una condici贸n
[1,2,3,4,5].select { |x| x.odd? }

# Nos retorna el elemento m谩s peque帽o
[1,2,3,4,5].min

# Nos retorna el elemento m谩s grande
[1,2,3,4,5].max

# Va sumar todos los elementos del Array
[1,2,3,4,5].sum

Algo a tener en cuenta es que los Arrays en Ruby no tienen un tipo es espec铆fico, lo cual quiere decir que pueden ser de diferentes tipos.

array_1 = [1, 4.5, "string", :symbol, []]

array_1.map { |x| x.class }

Algunos Strings retornar Arrays.

"Hola mundo".split(" ") # ["Hola","mundo"]

"Hola mundo".split(" ").size # 2

"Hola mundo".split(" ").map { |x| x.upcase } # ["HOLA", "MUNDO"]

puts("Hola mundo".split(" ").map { |x| x.upcase }.join("\n") )
# HOLA 
# MUNDO

# El siguiente m茅todo puede ordenar el Array
["r","i","c","w","e","f","a"].sort # ["c", "i", "r", "w"]

pero por que |x| que es lo que eso hace ?

Esto es interesante, yo estoy usando ruby 2.7 y me da 10 nuevos metodos en Array.methods.size

estaria padre poder saber cuales se agregaron desde la 2.5 que usa el profesor.

inlcuso ayer que salio la version 3.0 de ruby, ver esto mismo.

Los arreglos son usados para cuando necesitas trabajar con un grupo grande de elementos similares.

Una peque帽a lista de m茅todos para arreglos:

length 驴qu茅 tan grande es este arreglo? (cu谩ntos elementos)
first obtiene el primer elemento del arreglo (lo mismo que arreglo[0])
last obtiene el 煤ltimo elemento del arreglo (lo mismo que arreglo[-1])
push agrega un nuevo elemento al final del arreglo
pop elimina (y regresa) el 煤ltimo elemento del arreglo

Hola explicas mas adelante la diferencia entre procs, lambda, y lo que es yield y el uso de bloques en general? Ando algo perdida con respecto a eso. Gracias.

letras.count{ |x| x == 鈥測鈥 }

Con 鈥減uts鈥 siempre se crea una nueva linea asi que no es necesario el .join ("\n")

Tambien se puede ocupar << en vez de push.

Meclando marca personal con el curso de Ruby https://www.instagram.com/p/B6gr6rDH81s/

no me funciona el 鈥榤ethod鈥 sum, a alguien mas le pasa?

irb(main):158:0> numeros.sum
NoMethodError: undefined method `sum' for [1, 2, 3, 4, 5]:Array
	from (irb):158
	from /usr/bin/irb:11:in `<main>'
irb(main):159:0> [1, 2, 3, 4, 5].sum
NoMethodError: undefined method `sum' for [1, 2, 3, 4, 5]:Array
	from (irb):159
	from /usr/bin/irb:11:in `<main>'
irb(main):160:0>```

Hola comunidad 驴Cu谩l creen que es la diferencias entre m茅todos count y size para determinar el tama帽o de un array?

ejemplo :

color = :rojo
color2 = :rojo

color = color2 (en el id)

Los simbols no son strings