Si avoir le hachage: a essayé ceci: p> 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}
3 Réponses :
Je pense que c'est le plus proche de ce que vous voulez
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 , La manière générale est de générer un nouveau hachage: p> pour RUBY depuis 2.4.0 Vous pouvez utiliser le hachage # Transform_values Code> Méthode: P> hash.transform_values{ |value| value * value }
Nope, hachage # transform_values code> 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 Code> est OK, mais le Hash # Transform_Values CODE> est une méthode à partir du ActiveUport CODE> LIB.
Nope, c'est dans le noyau depuis 2,4.
Merci. Mais le problème est maintenant que l'OP savait i> 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 code> boucle?
hash.each{ |k, v| hash[k] = v * v }
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.