Ruby a une interface d'itération uniforme. Toutes les collections dans Ruby ont une méthode appelée each
, qui vous permet de parcourir chaque élément de la collection. Notez, cependant, que l'itération explicite est une odeur de code. Vous devez principalement utiliser des itérateurs de niveau supérieur tels que map
, reduce
, select
, find
, reject
et autres.
Dans ce cas particulier où la collection est un Hash
, chaque élément qui est donné à votre bloc, est un tableau à deux éléments comprenant la clé et la valeur:
print hsh.reduce('') {|s, el|
s << "The key is #{el.first} and the value is #{el.last}.\n"
}
Merci à la destructuration de Ruby bind, vous pouvez simplement lier les deux éléments du tableau à deux variables dans votre bloc et vous n'aurez pas la nécessité de prendre constamment le tableau à part:
print hsh.reduce('') {|s, (k, v)|
s << "The key is #{k} and the value is #{v}.\n"
}
si vous devez itérer un hashmap, vous êtes peut-être en utilisant le mauvais conteneur – Scoregraphic
@Scoregraphic - pas nécessairement - ce n'est pas si rare. Exemple: sérialisation des données. –
Attendez, avez-vous un hachage avec une seule paire clé/valeur dont la valeur est un tableau de tableaux? – haffax