JavaFree.org | RubyOnBr.org

Impressão de Hash invertido

Acompanhar Impressão de Hash invertido 10 posts, 5 participantes

Avatar GPSilva 65 posts

Brothe’s como eu faço para imprimir um hash na ordem que ele foi criado?

Por exemplo:
hash = { “a:” => “aa”, “b” => “bb”, “c” => “cc”, “d” => "dd"}

hash.each do |value|
puts "#{value} "
end

resultado:
dd cc bb aa

deveria sair:
aa bb cc dd

O que devo fazer para sair da forma que preciso?

 
Avatar nofxx 278 posts

Cara, soh o ruby 1.9 vai gravar a order da hash….

O que voce pode fazer eh :

=> {"b"=>"bah", “a”=>"foo"}.sort
=> [[“a”, “foo”], [“b”, “bah”]]

 
Avatar Fernando Luizao 330 posts

Use essa idéia do Shairon nesse tópico:

http://forum.rubyonbr.org/forums/15/topics/2826

 
Avatar nofxx 278 posts

puts “Putis”, eu tinha até postado no tópico e nem lembrava.. heh

 
Avatar Shairon Toledo 1272 posts

Eu fiz por ordem dos valores e não de inserção.

 
Avatar GPSilva 65 posts

Preciso manter essa sequência quando precisa apresentar este dados ao usuário.

Estou armazenado o hash no banco como string normal. Quando preciso utilizar ele, realizo a busca e jogo o resultado dentro de infraestrutura, jogo a string completa dentro da variável. O problema é que a sequência é perdida.

Se alguém puder ajudar com idéias que venham resolver este problema serei grato.

ah! o hash contem dados que serão inseridos no pdf para futuros relatórios.

 
Avatar Daniel Gatis 158 posts

ola ;)

Desencana! Hash não é uma boa solução para isso.

1 alternativa:
modela usando activerecord

2 alternativa:
modela usando objetos simples e serealiza pra json ou yaml

valeu

 
Avatar Fernando Luizao 330 posts

Usa OpenStruct =).

 
Avatar Shairon Toledo 1272 posts

output

{:bar=>2, :baz=>3, :qux=>4, :foo=>1}
foo , 1
bar , 2
baz , 3
qux , 4

Só falta acrescentar uns 15 centavos para ficar bom!

 
Avatar GPSilva 65 posts

Obrigado a todos que colaborarão com a solução para o problema. Irei análisar todas as sugestões e quanto tiver escolhido a melhor solução para meu problema postarei aqui.

Por mais obrigado.