Je migre mon code PHP vers Ruby et à un moment donné j'ai besoin de mettre à jour les éléments de hachage à l'intérieur d'une boucle. Par exemple:Comment mettre à jour un objet de hachage Ruby à l'intérieur d'une boucle sur ce hachage?
compositions.each_pair do |element,params|
params['composition'].each_pair do |item,data|
data['af'] /= params['af sum']
data['mf'] /= params['mass']
end
end
Je pourrais le faire en utilisant des index d'éléments, mais ce sera moche. Existe-t-il un moyen agréable de lier les variables de boucle aux éléments de hachage correspondants? En PHP, j'écrirais &$params
et &$data
dans les boucles correspondantes. Ou peut-être une meilleure suggestion?
Mise à jour
Deux tests pour démontrer le problème. La première:
a={'a'=>1, 'b'=>2, 'c'=>3}
a.each_pair do |k,v|
v += 1
end
p a # => {"a"=>1, "b"=>2, "c"=>3}
et le second
a.each_pair do |k,v|
a[k] += 1
end
p a # => {"a"=>2, "b"=>3, "c"=>4}
Update2
Merci à Mladen (voir ci-dessous), j'ai compris la différence entre ces deux cas. Cependant, j'ai encore une question: comment mettre à jour data
article (pas seulement ses propres articles)? Disons que nous ajoutons
data = data['af'] + data['mf']
à la boucle interne.
Quel est le problème avec le code ci-dessus? En outre, vous pouvez publier un exemple de structure de données. –
Le code ne met pas à jour 'compositions [élément] ['composition'] [item] ['af']' et l'autre parce qu'il n'y a pas de lien entre les variables de la boucle et le hash – Andrei
Comment l'avez-vous testé? ? Il doit mettre à jour 'compositions [element] ['composition'] [item] ['af']' parce que 'data' est juste une référence à' compositions [élément] ['composition'] [item] 'et' data [' foo '] =' quelquechose 'va modifier la structure de données 'compositions'. – BaroqueBobcat