Sobes.tech
Intern

O que é um hash (HASH) em Ruby?

sobes.tech IA

Resposta da IA

Hash (Hash) em Ruby é uma coleção ordenada de pares "chave-valor", onde cada chave única está associada a um valor específico. As chaves geralmente são símbolos (Symbol) ou strings (String), mas podem ser quaisquer objetos que implementem os métodos eql? e hash.

Características do hash:

  • Ordem: Desde Ruby 1.9, os hashes mantêm a ordem de inserção dos elementos.
  • Acesso por chave: O acesso aos valores é feito rapidamente pela chave correspondente.
  • Tamanho dinâmico: Os hashes podem expandir-se ou contrair-se à medida que elementos são adicionados ou removidos.
  • Sem duplicados de chaves: Cada chave é única dentro de um hash.

Exemplos de criação de hashes:

# Uso de literal
pessoa = { "nome" => "Alice", "idade" => 30 }

# Uso de símbolos como chaves (forma mais comum e eficiente)
configuracao = { :tema => "escuro", :idioma => "ru" }

# Notação estilo hash com símbolos (Ruby 1.9+)
config = { host: "localhost", port: 8080 }

# Usando o construtor Hash.new
hash_vazio = Hash.new

Operações principais com hashes:

Operação Exemplo Descrição
Acesso ao valor pessoa["nome"] Retorna o valor associado à chave "nome"
Adição/alteração pessoa["cidade"] = "Nova York" Adiciona ou altera o par chave-valor
Remoção pessoa.delete("idade") Remove o par com a chave "idade"
Tamanho pessoa.size ou pessoa.length Retorna o número de pares no hash
Verificação de chave pessoa.key?("nome") Verifica se a chave existe no hash
Verificação de valor pessoa.value?(30) Verifica se o valor existe no hash
Iteração `pessoa.each { chave, valor
Chaves pessoa.keys Retorna um array com todas as chaves
Valores pessoa.values Retorna um array com todos os valores

Exemplo de uso:

dados_usuario = {
  nome: "Boris",
  idade: 45,
  cidade: "Moscou"
}

# Acesso aos dados
puts dados_usuario[:nome]   # => Boris

# Adicionando novo campo
dados_usuario[:trabalho] = "Desenvolvedor"

# Alterando valor
dados_usuario[:idade] = 46

# Removendo campo
dados_usuario.delete(:cidade)

# Iterando sobre o hash
dados_usuario.each do |chave, valor|
  puts "#{chave}: #{valor}"
end