Hash em Ruby

O que é um Hash?

Uma simples definição, um hash é uma coleção de pares chave-valor, ou seja, uma chave apontando para um valor.

Explicando um pouco mais...

Hash é uma estrutura de dados semelhante ao Array, conhecida também como Hash Table, Dictionary e Hash Map com o objetivo de armazenar elementos ou informações. Porém, diferentemente do array:

  1. Seus elementos estão associados a um objeto e não um índice inteiro;
  2. Uma chave sempre ira apontar para um valor;
  3. Uma chave Hash pode ser (quase) qualquer tipo de objeto;
  4. A chave identifica unicamente um objeto. Tipicamente é um atributo dele.

Manipulando - Hash

Imagine o seguinte cenário, estamos montando um cadastro de clientes, e vamos usar o hash para armazenar as informações dos clientes…

Vamos começar com um hash vazio

person = Hash.new
=> {}

# Também podemos criar um novo hash vázio, apenas atribuindo {}
# person = {}

Conferindo se person é realmente um hash

person
=> {}
person.class
=> Hash

Verificar se nosso hash está vazio

person.empty?
=> true

Podemos iniciar um hash com dados...

genre = { m: 'Male', f: 'Female' }
=> {:m=>"Male", :f=>"Female"}
genre
=> {:m=>"Male", :f=>"Female"}

A chave de um Hash pode ser qualquer tipo de dado

hash = {1 => 'A integer', true => 'A boolean', [1,2,3] => 'Array'}
=> {1=>"A integer", true=>"A boolean", [1, 2, 3]=>"Array"}
hash
=> {1=>"A integer", true=>"A boolean", [1, 2, 3]=>"Array"}

Vamos adicionar name, age e birth

person[:name] = 'Diego'
=> "Diego"

person[:age] = 34
=> 34

person[:birth] = '23/03/1987'
=> "23/03/1987"

Verificando se os dados foram inseridos corretamente:

person
=> {:name=>"Diego", :age=>34, :birth=>"23/03/1987"}

Vamos ver os dados:

person[:name]
=> "Diego"

person[:age]
=> 34

person[:birth]
=> "23/03/1987"

Quantos items temos em nosso hash person?

person.size
=> 3

Vamos excluir birth?

person.delete(:birth)
=> "23/03/1987"

Como deve ter ficado os dados de person?

person
=> {:name=>"Diego", :age=>34}

Verificando se nosso hash está vazio

person.empty?
=> false

Caso você queira se aprofundar e saber mais detalhes sobre Hash eu sugiro que dê uma olhada na documentação do Ruby que também é bastante completa e tem vários exemplos.

20