Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Ruby

Curso de Ruby

Simón Soriano

Simón Soriano

Tipos de datos V: Hashes

8/39
Recursos

Hashes, también conocidos como arrays asociativos, mapas o diccionarios, son parecidos a los arrays en que son una colección indexada de referencias a objetos. Sin embargo, mientras que en los arrays los índices son números, en los hashes se puede indexar con objetos de cualquier tipo.

Cuando se almacena un valor en un array, se dan dos objetos: el índice y el valor. Luego, se puede obtener dicho valor, gracias al índice.

Aportes 29

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Hola, para ue no tarden lo que yo escribiendo uno por uno los valores del hash, pueden copiar esto:
capitales= {“Peru” => “Lima”, “Chile” => “Santiago de Chile”, “España” => “Madrid”, “Argentina” => “Buenos aires”, “Paises Bajos” => “Amsterdan”, “Estados Unidos” => “Washington”}

Si vienen de Python, seria practicamente lo mismo que un diccionario.

Hashes

Es una estructura que almacena datos como un diccionario lo haría (valor -> 10. Información asociada a ese valor)

  • Se definen dentro de llaves

    • ej: estudiante = {“name” => “victor”, [] => “Soy arreglo”, “Ciudad” => “Bogotá”, 30 => “Años”}
  • Se le pueden asignar valores por defecto a las posiciones vacías

  • Pueden modificarse en tiempo de ejecución

  • Para los valores clave por regla suele utilizarse un símbolo

    • ej: estudiante = {:name => “victor”, :Ciudad => “Bogotá”, :30 => “Años”}
  • Si solo hay claves “símbolos” por regla se escribe asi

    • ej: estudiante = {name: “victor” Ciudad: “Bogotá” 30: “Años”}
  • En otros lenguajes son comúnmente conocidos como arreglos asociativos

  • En un arreglo se accede a la informacion por medio de un indice, en los hashes la clave con la que podemos acceder pude ser cualquier tipo de objeto, incluso un símbolo, o arreglo

  • Conceptos extraídos de :

Arrays:

letras = [“q”,“w”,“e”]

letras.size = indica el tamaño del array

letras.class = indica el tipo de la clase

letras[n] = indica el lugar del objeto

letras.include? “q”

[1,2,3,4,5].map { |x| x**2}

Hash:

capitales = { “Colombia” => “Bogota” }

podemos hacer lo siguiente :

capitales[“Bolivia”] = “La paz”

capitales = { “Colombia” => “Bogota” , “Bolivia” => “La paz” }

capitales.transforn_values { |x| x.downcase } = esto sirve para transformar todo los valores de un hash a minuscula

Ahora…

capitales.map { |k,v| “La capital de #{k}es #{v}”}

metodo merge :

capitales.merge { “Marte” => “Bus” }

agrega el hash al método merge

PARA cambiar array a hash:

[[“pepito”,13] , [“sutanito”,14]].to_h

esto es como un JSON?

Hashes


# Así declaras un dato Hash
capitales = {}

Para declarar el contenido de un Hash, lo hacemos de dos maneras

capitales = {"Colombia" => "Bogota" }

# Podemos agregar más elemntos así
capitales["Mexico"] = "Ciudad de Mexico"

# Para acceder a un valor específico, la llave tiene que ser igual, en Ruby no se diferencia cuando un carácter es Uppercase o lowercase
capitales["Colombia"] # "Bogota"

# Para saber su tamaño
capitales.size

# Para saber si está vacío
capitales.empty?

# Preguntar si este Hash tiene un valor específico en el que estemos interesados
capitales.has_value? "Bogota"

# Preguntar si este Hash tiene una llave (elemento) específico en el que estemos interesados
capitales.has_value? "Colombia"

# Podemos invertir los valores a llames y viceversa
capitales.invert
capitales.invert["Bogota"] # "Colombia"

# Se utiliza para mezclar dos Hashes
capitales.merge({"Marte" => "Musk"})

Cuando ponemos un corchete seguido de un método Ruby lo interpreta como un lambda.

# Este se comporta muy parecido al método .map() de los Arrays
capitales.transform_values { |x| x.downcase }

# La k, v hace referencia a Key y Value.
puts capitales.map { |k,v| "La capital de #{k} es #{v}" }

También podemos crear un hash a partir de arreglo de parejas de Arrays

[["pepito",13],["Carmen",14]].to_h

hashes es como diccionarios e python u objetos en otro lenguajes como php

Array asociativo para los que vienen de PHP

Si vienen de Js, es parecido a un JSON

Convertir valores en llaves

Por ahí leí que es como un diccionario de python, esos comentarios que aportan sobre manera antes de empezar la clase 😃

capitales= {“Peru” => “Lima”, “Chile” => “Santiago de Chile”, “España” => “Madrid”, “Argentina” => “Buenos aires”, “Paises Bajos” => “Amsterdan”, “Estados Unidos” => “Washington”}

capitales= {“Peru” => “Lima”, “Chile” => “Santiago de Chile”, “España” => “Madrid”, “Argentina” => “Buenos aires”, “Paises Bajos” => “Amsterdan”, “Estados Unidos” => “Washington”}

arr = [ [“pepito”,14] , [“sutanito”,15] ]
→ [ [“pepito”, 14], [“sutanito”, 15] ]
hash = arr.to_h
→ {“pepito”=>14, “sutanito”=>15}

metodo similar al map, para transformar hash

acceder a un valor especifico del hash

Metodo map en hash

Size method

Crear un hash a partir de un arreglo bidimensional o parejas de arreglos.

buscar una llave en el hash

mezclar dos hash

Preguntar si hay una valor en el hash

Preguntar si es vacio {}.empty?

declarar hash

string template

Tipo de dato/objeto HASH → name_var = { }

capitales = {‘Colombia’ : ‘Bogotá’}
capitales[‘México’] = 'CDMX’
capitales
→ {“Colombia”=>“Bogotá”, “México”=>“CDMX”}
capitales[‘México’]
→ “CDMX”

Hola a todos! Una pregunta…

Es normal que mi terminal termine con irb(main):003:0>. Veo que el de Simon no termina igual.
He notado que cuando cometo un error,el terminal se convierte en esto irb(main):010:1 " y luego ya no permite seguir escribiendo codigo y si lo hace no me responde.

Entiendo que :003 significa el numero de linea.
Pero alguien me puede ayudar a comprender que significa el ultimo digito. Cuando el :0> se convierte en :1" despues de un error; porque pasa eso?

**los Hashes son equivalentes a objetos **
por si vienen de js

capitales.has_value? “washington” para preguntar si tiene algún valor en especifico el hash
capitales.has_key? “washington” para preguntar si tiene algúna key en especifico el hash
capitales.transform_values {|x| x.downcase} para transformar todos los valores a minúsculas
capitales.map {|x, v| “la capital de #{k} es #{v}”}