Hashes en Ruby

El valor del hash puede ser tanto literal como un numero:

contactos = {
    "Alberto" => 000000000,
    "Barreto" => 111111111,
    159 => 222222222
}

puts(contactos["Alberto"])   # 000000000
puts(contactos[159])         # 222222222

 

Si duplicamos la llave, se sobreescribira con el ultimo valor y nos salta un warning:

contactos = {
    "Alberto" => 000000000,
    "Barreto" => 111111111,
    159 => 222222222,
    "Alberto" => 333333333
}

puts(contactos["Alberto"])   # 333333333

 

Podemos modificar los valores una vez creados:

contactos = {
    "Alberto" => 000000000,
    "Barreto" => 111111111,
    159 => 222222222,
}

contactos["Alberto"] = 444444444

puts(contactos["Alberto"])    # 444444444

 

Podemos nombrar los hashes como un símbolo de dos formas:

contactos = {
    :Alberto => 000000000,
    :Barreto => 111111111,
    Candido:222222222,
    Dario:333333333
}

puts(contactos[:Alberto])      # 000000000
puts(contactos[:Dario])        # 333333333

 

Añadir Hashes

contactos = {
    Alberto: 000000000,
    Barreto: 111111111
}

contactos[:Dario] = 222222222
contactos.store(:Candido,333333333)

puts(contactos)       # {:Alberto=>0, :Barreto=>111111111, :Dario=>222222222, :Candido=>333333333}

 

Merge no modifica la colección original, devuelve una colección nueva modificada

contactos = {
    Alberto: 000000000,
    Barreto: 111111111
}

nuevosContactos = contactos.merge({Dario:222222222,Pepe:333333333})

puts(contactos)         # {:Alberto=>0, :Barreto=>111111111}  
puts(nuevosContactos)   # {:Alberto=>0, :Barreto=>111111111, :Dario=>222222222, :Pepe=>333333333}

 

Conocer el numero de elementos de la coleccion:

contactos = {
    Alberto: 000000000,
    Barreto: 111111111
}

puts("#{contactos.length}")    # 2

 

Listar todas las llaves de nuestra colección de hash:

puts(contactos.keys)     # [Alberto, Barreto]

Listas todos los valores de nuestra coleccion de hash:

puts(contactos.values)   # [000000000, 111111111]

 

Conocer si existe un hash especifico en la colección:

puts(contactos.has_key?(:Alberto))   # true
puts(contactos.has_key?(:Daniel))    # false

Conocer si existe un valor especifico en la colección:

puts(contactos.has_value?(000000000))  #true
puts(contactos.has_value?(012345678))  #false