Ruby:在数组中添加第二个元素,其中第一个元素是相同的

时间:2010-05-13 13:52:52

标签: ruby arrays

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

在ruby中如何通过这个数组并添加第二个元素,如果第一个元素与输出相同,则输出如下:

[[1, 25],[2,30],[4,5]]

3 个答案:

答案 0 :(得分:4)

如果顺序不重要,将对插入哈希,如果密钥已经存在则添加,然后将哈希展平回数组是一种巧妙的方法。在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]]

答案 1 :(得分:2)

Ruby中的解决方案

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

Python中的解决方案:

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

答案 2 :(得分:1)

你可以这样做(警告,输出有点乱码,你可能想转换成数组):

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