2010-05-13 4 views

Répondre

4

Si l'ordre n'a pas d'importance, l'insertion des paires dans un hachage, en ajoutant si la clé existe déjà, et ensuite aplatir le hachage dans un tableau est une manière soignée. En irb:

>> a = [[1, 20],[2,30],[1,5],[4,5]] 

=> [[1, 20], [2, 30], [1, 5], [4, 5]] 

>> a.inject(Hash.new(0)) { |h, p| h[p[0]] += p[1]; h }.to_a 

=> [[1, 25], [2, 30], [4, 5]] 
+0

BTW: Dans Ruby 1.9, les clés de hachage sont garanties dans l'ordre d'insertion. –

2

Une solution dans Ruby:

L = [[1, 20],[2,30],[1,5],[4,5]] 
d = {} 
L.each{|k,v| d[k] = (d[k]||0) + v} 

Une solution dans le python:

L = [[1, 20],[2,30],[1,5],[4,5]] 
d = {} 
for k,v in L: 
    d[k] = d.get(k,0) + v 
+0

Je voudrais savoir python mais je n'ai pas et j'ai demandé ruby ​​ – s84

+0

Je vous ai répondu dans Ruby! –

+0

oh terriblement désolé. n'a pas l'air de code rubis pour moi. – s84

1

Vous pouvez le faire (avertissement, la sortie est un peu confus, vous voudrez peut-être convertir en tableau):

myArray = [[1, 20],[2,30],[1,5],[4,5]] 
outputHash = {} 
myArray.each do |values| 
    outputHash[values[0]] = outputHash[values[0]].to_i + values[1] 
end 
puts outputHash 
Questions connexes