0
votes

Comment utiliser "pour" et changer les valeurs dans un hachage de rubis?

Si avoir le hachage: xxx pré>

a essayé ceci: p> xxx pré>

mais renvoie la même valeur non la valeur souhaitée, je trouve un Solution: P>

hash.transform_values{ |value| value * value}
=> {:a=>1, :b=>4, :c=>9}


2 commentaires

Pourquoi voulez-vous utiliser une boucle? Car les boucles sont extrêmement rares dans Ruby.


"extrêmement rare" - j'irais même aussi loin que je n'en ai jamais vu l'un sauf dans les questions de débutant de rubis sur le débordement de la pile.


3 Réponses :


0
votes

Je pense que c'est le plus proche de ce que vous voulez xxx


0 commentaires

3
votes

Nous avons un riche standard Lib pour travailler avec des collections à Ruby. C'est très utile et couvre la plupart des cas nécessaires. Nous avons une excellente méthode Enumérable # map , Un filtre envahissant , énumérable # réduire dans Ruby et beaucoup d'autres. Veuillez lire la documentation.

La manière générale est de générer un nouveau hachage: p> xxx pré>

pour RUBY depuis 2.4.0 Vous pouvez utiliser le hachage # Transform_values ​​ Code> Méthode: P>

hash.transform_values{ |value| value * value }


6 commentaires

Nope, hachage # transform_values ​​ est le meilleur ici. Droit au point, pas de croûte supplémentaire.


Je ne suis pas d'accord avec toi. La mutation des données est une mauvaise habitude. Cette approche peut entraîner des effets secondaires.


Quelle mutation de données? On dirait que quelqu'un ne pratique pas ce qu'il prêche :)


Ah, désolé je pense que vous parlez de la première réponse. Transform_Values ​​ est OK, mais le Hash # Transform_Values ​​ est une méthode à partir du ActiveUport LIB.


Nope, c'est dans le noyau depuis 2,4.


Merci. Mais le problème est maintenant que l'OP savait sur Transform_Values ​​du début et ils l'ont jugée insatisfaite. Pourriez-vous ajouter quelques mots pourquoi il devrait être préférable à un pour boucle?



0
votes
hash.each{ |k, v| hash[k] = v * v }

0 commentaires