Sobes.tech
Intern

¿Qué es un hash (HASH) en Ruby?

sobes.tech AI

Respuesta de la IA

Hash (Hash) en Ruby es una colección ordenada de pares "clave-valor", donde cada clave única está vinculada a un valor específico. Las claves suelen ser símbolos (Symbol) o cadenas (String), pero pueden ser cualquier objeto que implemente los métodos eql? y hash.

Características del hash:

  • Orden: Desde Ruby 1.9, los hashes mantienen el orden de inserción de los elementos.
  • Acceso por clave: El acceso a los valores se realiza rápidamente mediante la clave correspondiente.
  • Tamaño dinámico: Los hashes pueden expandirse o comprimirse a medida que se añaden o eliminan elementos.
  • Sin duplicados de claves: Cada clave es única dentro de un hash.

Ejemplos de creación de hashes:

# Uso de literal
persona = { "nombre" => "Alicia", "edad" => 30 }

# Uso de símbolos como claves (forma más común y eficiente)
configuración = { :tema => "oscuro", :idioma => "ru" }

# Notación estilo hash con símbolos (Ruby 1.9+)
config = { host: "localhost", puerto: 8080 }

# Usando el constructor Hash.new
hash_vacío = Hash.new

Operaciones principales con hashes:

Operación Ejemplo Descripción
Acceso a valor persona["nombre"] Devuelve el valor asociado a la clave "nombre"
Añadir/modificar persona["ciudad"] = "Nueva York" Añade o modifica la pareja clave-valor
Eliminar persona.delete("edad") Elimina la pareja con la clave "edad"
Tamaño persona.size o persona.length Devuelve el número de pares en el hash
Verificación de clave persona.key?("nombre") Verifica si la clave existe en el hash
Verificación de valor persona.value?(30) Verifica si el valor existe en el hash
Iteración `persona.each { clave, valor
Claves persona.keys Devuelve un array con todas las claves
Valores persona.values Devuelve un array con todos los valores

Ejemplo de uso:

datos_usuario = {
  nombre: "Boris",
  edad: 45,
  ciudad: "Moscú"
}

# Acceso a datos
puts datos_usuario[:nombre]   # => Boris

# Añadir un nuevo campo
datos_usuario[:trabajo] = "Desarrollador"

# Modificar un valor
datos_usuario[:edad] = 46

# Eliminar un campo
datos_usuario.delete(:ciudad)

# Iterar sobre el hash
datos_usuario.each do |clave, valor|
  puts "#{clave}: #{valor}"
end