Itérer sur une profondément imbriqués niveau de hachages en Ruby

J'ai donc une table de hachage, et pour chaque niveau de la table de hachage, je veux le ranger sa clé et la valeur. Le problème est, une valeur peut être un autre tableau de hachage. En outre, le hash peut contenir des paires clé-valeur où la valeur est encore un autre tableau de hachage, etc, etc. Aussi, je ne sais pas comment profondément imbriqués chaque hachage sera. Pour donner un exemple:

{
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => {
     :key4 => 'value4',
     :key5 => 'value5'
   },
    :key6 => {
      :key7 => 'value7',
      :key8 => {
        :key9 => 'value9'
      }
    }
  }

..Et ainsi de suite. Ce que je veux faire est d'enregistrer chaque touche, la valeur de la paire et de l'id de son parent. I figure ce sera probablement fait de manière récursive, je suis juste pas comment parce que je suis familier avec les fonctions récursives. Je sais comment parcourir les données normalement:

  myHash.each {|key, value|
    ...Do something with the key and value ...
  }

Et donc je suppose que l'appel récursif sera quelque chose comme ceci:

def save_pair (myHash)
  myHash.each {|key, value|
    if(value.class != Hash) ? Pair.create(key, value) : save_pair(value)
  }
end

Ce n'est pas testé, et je ne sais toujours pas comment intégrer sauver le parent id indépendamment.

InformationsquelleAutor varatis | 2012-01-05