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= {鈥淧eru鈥 => 鈥淟ima鈥, 鈥淐hile鈥 => 鈥淪antiago de Chile鈥, 鈥淓spa帽a鈥 => 鈥淢adrid鈥, 鈥淎rgentina鈥 => 鈥淏uenos aires鈥, 鈥淧aises Bajos鈥 => 鈥淎msterdan鈥, 鈥淓stados Unidos鈥 => 鈥淲ashington鈥潁

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 = {鈥渘ame鈥 => 鈥渧ictor鈥, [] => 鈥淪oy arreglo鈥, 鈥淐iudad鈥 => 鈥淏ogot谩鈥, 30 => 鈥淎帽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 => 鈥渧ictor鈥, :Ciudad => 鈥淏ogot谩鈥, :30 => 鈥淎帽os鈥潁
  • Si solo hay claves 鈥渟铆mbolos鈥 por regla se escribe asi

    • ej: estudiante = {name: 鈥渧ictor鈥 Ciudad: 鈥淏ogot谩鈥 30: 鈥淎帽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 = [鈥渜鈥,鈥渨鈥,鈥渆鈥漖

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? 鈥渜鈥

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

Hash:

capitales = { 鈥淐olombia鈥 => 鈥淏ogota鈥 }

podemos hacer lo siguiente :

capitales[鈥淏olivia鈥漖 = 鈥淟a paz鈥

capitales = { 鈥淐olombia鈥 => 鈥淏ogota鈥 , 鈥淏olivia鈥 => 鈥淟a paz鈥 }

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

Ahora鈥

capitales.map { |k,v| 鈥淟a capital de #{k}es #{v}鈥潁

metodo merge :

capitales.merge { 鈥淢arte鈥 => 鈥淏us鈥 }

agrega el hash al m茅todo merge

PARA cambiar array a hash:

[[鈥減epito鈥,13] , [鈥渟utanito鈥,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= {鈥淧eru鈥 => 鈥淟ima鈥, 鈥淐hile鈥 => 鈥淪antiago de Chile鈥, 鈥淓spa帽a鈥 => 鈥淢adrid鈥, 鈥淎rgentina鈥 => 鈥淏uenos aires鈥, 鈥淧aises Bajos鈥 => 鈥淎msterdan鈥, 鈥淓stados Unidos鈥 => 鈥淲ashington鈥潁

capitales= {鈥淧eru鈥 => 鈥淟ima鈥, 鈥淐hile鈥 => 鈥淪antiago de Chile鈥, 鈥淓spa帽a鈥 => 鈥淢adrid鈥, 鈥淎rgentina鈥 => 鈥淏uenos aires鈥, 鈥淧aises Bajos鈥 => 鈥淎msterdan鈥, 鈥淓stados Unidos鈥 => 鈥淲ashington鈥潁

arr = [ [鈥減epito鈥,14] , [鈥渟utanito鈥,15] ]
鈫 [ [鈥減epito鈥, 14], [鈥渟utanito鈥, 15] ]
hash = arr.to_h
鈫 {鈥減epito鈥=>14, 鈥渟utanito鈥=>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 = {鈥楥olombia鈥 : 鈥楤ogot谩鈥檥
capitales[鈥楳茅xico鈥橾 = 'CDMX鈥
capitales
鈫 {鈥淐olombia鈥=>鈥淏ogot谩鈥, 鈥淢茅xico鈥=>鈥淐DMX鈥潁
capitales[鈥楳茅xico鈥橾
鈫 鈥淐DMX鈥

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? 鈥渨ashington鈥 para preguntar si tiene alg煤n valor en especifico el hash
capitales.has_key? 鈥渨ashington鈥 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| 鈥渓a capital de #{k} es #{v}鈥潁