2017-05-08 4 views
0

je une table de hachage comme ceci:Ruby RoR obtenir les clés et les valeurs de hachage séparément

hash = {"str1"=>5, "str2"=>9, "str3"=> 3} 

hash.keys donne suite ["str1", "str2", "str3"]

hash.values donne suite [5, 9, 3]

Je suis en train exporter vers Excel avec Axlsx en utilisant sheet.add_row

sheet.add_row [hash.keys[0], hash.values[0]] # hash.keys[0] = "str1" and hash.values[0] = 5 
sheet.add_row [hash.keys[1], hash.values[1]] # hash.keys[1] = "str2" and hash.values[1] = 9 
sheet.add_row [hash.keys[2], hash.values[2]] # hash.keys[2] = "str3" and hash.values[2] = 3 

Dans une feuille Excel, ceci est le résultat

str

est simple si le hachage est pas grand, mais si elle est composée de 20 éléments ou plus, par exemple, faisant ainsi n'est pas pratical à tout !! Je veux faire cela pour tous les éléments du hachage d'une meilleure manière.

sheet.add_row [hash.keys[0], hash.values[0]] 
sheet.add_row [hash.keys[1], hash.values[1]] 
sheet.add_row [hash.keys[2], hash.values[2]] 
........ 
sheet.add_row [hash.keys[19], hash.values[19]] 

Répondre

6

Utilisez simplement Hash#each itérer sur chaque paire clé-valeur:

hash = {"str1"=>5, "str2"=>9, "str3"=> 3} 
hash.each { |k, v| sheet.add_row [k, v] } 
+0

Il dit pour moi 'méthode non définie chaque » pour nul: NilClass' c'est pourquoi j'ai essayé de séparer les clés et les valeurs donc je peut utiliser la méthode 'each' – media

+0

@media l'erreur signifie que' hash' est 'nil', rien de plus. Revérifier. –

+0

Merci @Andrey Deineko, ça marche! (C'était juste une erreur de frappe de moi) – media