2010-08-06 4 views
0

C'est la sortie de faire puts get_account_entry.inspectComment analyser cette paire clé-valeur?

[[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]] 

Comment puis-je extraire la valeur de: name => « id » par exemple? À l'origine, je pensais que c'était comme un hachage, donc get_account_entry [id] produirait le résultat, mais ce n'est pas le cas, ce qui est logique en regardant de plus près.

Mais alors, comment puis-je obtenir les valeurs?

Chuck m'a sur la bonne voie, mais ont besoin d'aide:

puts get_account_entry[0].map {|hash| [hash[:name], hash[:value]] } 

Ceci est la sortie de la console rubis:

> id 
> 8b08e26a-6d35-7140-9e41-4c5b4612c146 
> name 
> Typhoon Corporation 

Répondre

2

Vous êtes proche de la droite. C'est un tableau contenant un tableau de Hash, qui forment ensemble une sorte de structure semblable à Hash. Pour obtenir la valeur avec le nom correspondant "id", vous devez faire get_entries[0].find {|field| field[:name] == 'id'}[:value]. Le [0] initial nous obtient à l'intérieur du tableau externe inutile, puis nous devons trouver quel hash a l'entrée :name "id", alors nous lui demandons la valeur de son entrée :value.

Si vous voulez convertir cette structure de données de nom-valeur en un hachage normal, vous pouvez faire Hash[get_entries[0].map {|hash| [hash[:name], hash[:value]] }].

+0

ah, intéressant - J'aime l'idée de convertir en une table de hachage normale ... Je vais essayer que ... – Angela

+0

Salut, désolé, j'ai essayé et obtenu l'erreur suivante: nombre impair d'arguments pour Hash Do J'y accède en utilisant Hash [id] [: value]? – Angela

+0

J'ai utilisé un put avant la ligne de hachage ci-dessus pour voir ce qui est sorti et il dit 'nombre impair d'arguments' – Angela

0

les plus CROCHETS externes "[]", dit que cette sérialisation représente un tableau.

Avez-vous essayé quelque chose comme get_entries [0] [id] (ou get_entries [0] [0] [id] car il est un double support)?

0

Voici comment j'approcherais.

a= [[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]] 

a[0].each do |hash| 
    hash.each_pair do |k,v| 
    puts v 
    end 
end 

Espérons que cela aide.

+0

Ah! devrait bientôt apprendre à penser en termes de blocs de code plutôt que des itérations douloureuses. La réponse de Chuck est la voie à suivre. –

+0

merci beaucoup - je pense aussi bien, apprécie ta réponse et le +1 sur le mandrin! – Angela

Questions connexes