O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Ruby_Aula 8.> Enter

Iniciado por Enter, 16/01/2015 às 00:53

16/01/2015 às 00:53 Última edição: 20/03/2015 às 17:09 por Enter
תודה

Se for repassar o guia, dê os devidos créditos ao criador: Enter
referencia: http://ruby-br.org/tutoriais/?t=4&p=13
Resquisitos: Ter lido e feito as lições anteriores
Mensagem do dia:"Quem de manhã compreendeu os ensinamentos da sabedoria, à noite pode morrer contente."Confúcio
[box2 class=titlebg title=Lição 8:Hashes]
Aula 7 .>Enter
Aula 8 .>Enter (Você está nela! :clap:)

Hashes

Arrays são coleções de objetos e também são hashes, porém, os hashes tem um formato de armazenamento diferente das arrays.

No caso, ao contrário das arrays, nas hashes você pode utilizar nomes ao invés de indices.
CitarHashes
http://ruby-br.org/tutoriais/?t=4&p=13
Hashes (tabelas associativas) são muito parecidos com arrays, mas têm objetos como índice. Um Hash apenas com índices numéricos é praticamente equivalente a um Array. Podem ser criados com uma "expressão de hash", que é uma lista de pares índice => valor, separados por vírgulas, entre os símbolos {}, da seguinte forma:

h = { "a"=>"letra a", "1+1"=>1+1 }  # >> {"1+1"=>2, "a"=>"letra a"}
Ou também explicitamente, usando os métodos da classe Hash:

a = Hash.new
b = Hash["a",1 , "b",2 , "c",1+2] # usando o método [] da classe Hash

Lembre-se que a contagem nas arrays os indices são numéricos e contados em ordem de 0...à..?(em ordem, até o ultimo elemento da array) para acessar determinado valor.

Então, enquanto que em Arrays você faz isso:

Sintaxe com exemplos:


Joao = 41212111
Maria = 31212111
Felizdina 91212111

listaTelefonica = Array.new
listaTelefonica = [Joao, Maria, Felizdina]

puts listaTelefonica[0] #Vai printar o retorno, do Joao, que é  = 41212111
puts listaTelefonica[1]#Vai printar o retorno, o telefone da Maria , que é = 31212111


puts listaTelefonica[Joao] #Vai dar error, pois os indices das arrays são núméricos e contados em ordem e joao não é uma posição na array, joao é um elemento que está

referenciando outro..

Então, basicamente, as variaveis criadas referenciando telefones só estão sendo utilizadas para referenciar outro valor.



Já com as hashes você pode fazer o seguinte, note a diferença:

sintaxe com exemplos: #Hash é semelhante a um dicionário ao invés de uma lista

listaTelefonica = Hash.new
listaTelefonica = {'Joao' => 41212111, 'Maria' => 31212111, 'anda' => 'verbo'} #No caso do Hash, é necessário usar as {} chaves ao invés dos [] na hora de colocar

definir elementos.

puts listaTelefonica.size # size é um dos métodos da classe hash para mostrar o tamanho da hash.

puts listaTelefonica['Joao'] #vai printar o telefone do joao
puts listaTelefonica['anda'] #vai printar a palavra/string verbo


puts listaTelefonica[0] #vai dar nill(nulo) pois isso não é uma array (não tem um indice númerico e em ordem), e não foi alocado nenhum valor ao zero.



Obs: Outra forma de alocar um valor na hash é:
sintaxe com exemplo:

dicionario = Hash.new
dicionario['Hello'] = "Olá!"
puts dicionario['Hello'] #vai retornar a string "Olá!"



[/box2]
Task:
Teste os métodos:
O método each
dicio = Hash.new
dicio = {"respirar" => "vida", "1+1"=>2}
dicio.each{|key, value| puts "#{key} igual #{value}"} #Observe aqui o uso da Interpolação/Interpolation #{}

vai retornar:
linha 1 de output/saída..: respirar igual vida
linha 2 de output/saída..:1+1 igual 2

O método keys (recupera e mostra o nome da chave/key da hash)
dicio = Hash.new
dicio = {"respirar" => "vida", "1+1"=>2}
puts dicio.keys


vai retornar
linha de output/saída..: ["respirar", "1+1"]


Deletando elementos da Hash
dicio = Hash.new
dicio = {'respirar' => "vida", "1+1"=>2}
dicio.delete("1+1")

puts dicio

vai retornar:
linha de output/saída..: {"a"=> "vida"}



**** Muito úteis:

Deletando Hashs com condição
dicio = Hash.new
dicio = {'cem' => 100, "1+1"=>2}

dicio.delete_if{|key, value| value < 100} #Qualquer key(chave) que contenha um valor menor que 100(exemplo), vai ser deletada.

puts dicio

Vai retornar
linha de output/saída..:  {"cem' => 100}   #Pois "1+1" =>2 foi deletado, por ser menor que 100






Colando Hash dentro de Hash!
lista = Hash.new
lista = {
'joao' => {
'telefone' => '3131231232',
'idade' =>20,
'pets' => ['peixe', 'cachorro', 'gato']
},
'Felizdina'=>'oi'
}



puts lista['joao']['idade']

#Vai retornar: 20 que é o valor da idade de joão

puts lista['joao']

#Vai retornar: todas as keys e valores dentro da array joão.

puts lista['Felizdina']

#Vai retornar "oi"