20
Hash em Ruby
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:
- Seus elementos estão associados a um objeto e não um índice inteiro;
- Uma chave sempre ira apontar para um valor;
- Uma chave Hash pode ser (quase) qualquer tipo de objeto;
- A chave identifica unicamente um objeto. Tipicamente é um atributo dele.
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