J'ai un hasch avec des valeurs entières: Je dois ajouter est là un bon moyen d'y parvenir? p> p> 100 code> à la première valeur et pour la deuxième valeur et sur, j'ai besoin de Ajoutez la valeur précédente à la valeur d'origine pour obtenir: p>
4 Réponses :
Vous pouvez utiliser et en le faisant, vous pouvez également définir les valeurs de hachage pour obtenir une somme accumulée: p> injecter Code> pour calculer la somme totale:
Ce problème a de nombreuses gaines, l'un étant de convertir une fonction de densité de probabilité discrète à une fonction de distribution cumulative. Vous avez fourni une bonne façon de le faire. Est-ce une première: votre réponse a été modifiée?
@CarySwoveland ha! Je suis généralement l'une des réponses d'édition à inclure des liens :-) On dirait que j'étais pressé.
Peut-être que ce n'est pas la solution la plus efficace, mais elle est définitivement gentille et lisible.
accumulated_sum = 0 h.each do |key, value| accumulated_sum += value hash[key] = 100 + accumulated_sum end
J'ai édité votre réponse en fonction de mon édition de la question.
Vous pouvez simplement garder une trace de la somme en tant que variable externe:
sum = 100
h.transform_values{|v| sum += v} # => {:a=>101, :b=>102, :c=>103, :d=>105, :e=>107}
solution immuable qui ne modifie pas l'entrée:
h.each_with_object({sum: 100, outcome: {}}) do |(k, v), acc|
acc[:outcome][k] = acc[:sum] += v
end
#â {:sum=>107, :outcome=>{:a=>101, :b=>102, :c=>103, :d=>105, :e=>107}}
Votre problème n'est-il pas en mesure de pouvoir exécuter le
. CODE code> ou vous avez besoin d'aide avec l'algorithme lui-même?Je demandais s'il y a une meilleure façon de rubis d'atteindre ce @Elvinas
Le temps n'est pas crucial pour votre problème. Vous devez simplifier le hasch pour faire votre point.
Ceci s'appelle Prefix-Sum i> ou Scan i> et est en effet étrangement manquant de la bibliothèque de collections de Ruby.
À moins que vous ayez une bonne raison de le faire, ce n'est généralement pas une bonne idée de supposer que les clés de hachage ont un ordre particulier.
@CarySwoveland Le hash génère à partir d'une sélection de SQL commandée par date