Hashes

O próximo grupo que vamos olhar é a Hash.

Hashes são uma generalização das arrays. Em vez de apenas permitir índices, como em array[3], as hashes permitem que qualquer objeto seja utilizado como um "índice". Portanto, você pode escrever hash["name"]

Suponha que eu queira guardar algumas informações sobre um amigo. Eu poderia utilizar um array, como este:


friend = [ "Jeffrey", "Biggs", "34 Airport Rd",  
      "Toronto", "Ontario" 
]
                       

Isso poderia funcionar, mas gostaria de ter em mente que friend[0] é o primeiro nome, friend[1] é o último nome e assim por diante. Isso pode começar a ficar bem complicado.

Este é exatamente o tipo de problema que uma hash pode ajudar. Esta é a forma de definir uma hash:


friend = {
	"first name" => "Jeffrey",
	"last name"  => "Biggs",
	"address"    => "34 Airport Rd",  
	"city"       => "Toronto",
	"province"   => "Ontario"
}
                       

Assim como arrays, você pode adicionar mais tarde um outro campo assim:


friend["country"] = "Canada"  
                       

Atenção: Observe que criamos hashes usando {chaves} enquanto que [colchetes] usamos para arrays.

Alguma terminologia: keys (chaves) e values (valores)

Como as hashes não usam índices numéricos, nós usamos a palavra keys (chaves) no lugar. Os objetos aos quais as keys se referem são chamadas values (valores).

No exemplo abaixo, as chaves são "first name", "last name" e "city". Seus respectivos valores são "Jeffrey", "Biggs" e "Toronto".

Iteração com hashes

Hashes também fazem iteração.

Hash#each

As hashes tem o método Hash#each, similar ao Array#each. Este métodos, no entanto, abastece tanto a chave quanto o valor.


friend.each do |key, value| 
	puts key + " => " + value 
end
                       

Isso produz:


city => Toronto
last name => Biggs
country => Canada
province => Ontario
address => 34 Airport Rd  
first name => Jeffrey
                       

Neste ponto temos um tropeço das hashes. Os dados numa hash não são armazenados numa ordem em particular. A razão disso é porque Ruby não sabe que "first name" vem antes de "city"? Nem sempre.

A melhor maneira de resolver problemas assim é criar uma classe para isso. Ruby é uma linguagem excelente para criar suas classes. Mas antes disso, temos que ver outras coisas. Criação de classes e métodos é o tópico do próximo capítulo.

Hash#each_pair é sinônimo de Hash#each.

Hash#each_key

O nome diz tudo. Este método itera usando todas as chaves, como Arrah#each.


>> friend.each_key do |key|  
?>     puts key
>> end
city
last name
country
province
address
first name
                       

Hash#each_value

Itera usando todos os valores.


>> friend.each_value do |val|  
?>     puts val
>> end
Toronto
Biggs
Canada
Ontario
34 Airport Rd
Jeffrey
                       

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados