2013-06-12 6 views
-1

Je dois créer un tableau pendant l'exécution qui est stocké dans un hachage. Comment puis-je y parvenir de manière intelligente? Le code suivant ne fonctionne pas puisque [...] services n'est pas un tableau.Hash of array dynamic

services = {} 
services["clean"] << 'bathroom' 

Répondre

3

Alternativement à la syntaxe de Neil Slater, vous pouvez utiliser:

h = Hash.new { |hash, key| hash[key] = [] } 

pour instancier un hachage avec une valeur par défaut de [].

+0

Je ne le savais pas. Beaucoup mieux la syntaxe. Sauf qu'il auto-vivifie sur toutes les recherches de clé quand vous pourriez ne pas vouloir cela. –

+0

qu'est-ce que c'est auto-vivify? –

+0

Pour un hachage de hachage de tableau: services = Hash.new {| hash, key | hash [clé] = Hash.new {| hash2, key2 | hash2 [key2] = []}} –

2

je pourrais faire quelque chose comme ceci:

(services["#{service['service']}"] ||= []) << service['attributes'] 

Cela ne fonctionnerait pas si vous voulez stocker nil ou false dans votre hachage, car il repose sur la truthiness de nil Renvoyé quand il n'y a la clé correspondante étant fausse, afin que l'opération ||= déclenche l'attribution d'un nouveau tableau vide.

Vous ne savez pas si la syntaxe est meilleure.