代码之家  ›  专栏  ›  技术社区  ›  Sam å±±

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

  •  1
  • Sam å±±  · 技术社区  · 14 年前
    [[1, 20],[2,30],[1,5],[4,5]]
    

    在Ruby中,如果第一个元素和输出相同,如何通过这个数组添加第二个元素,例如:

    [[1, 25],[2,30],[4,5]]
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   Nefrubyr    14 年前

    如果顺序不重要,则将对插入哈希,如果键已经存在则添加,然后将哈希展平回数组是一种很好的方法。在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]]
    
        2
  •  2
  •   Olivier Verdier    14 年前

    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
    
        3
  •  1
  •   TZer0    14 年前

    您可以这样做(警告,输出有点混乱,您可能希望转换为数组):

    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