2007/8/24, Yossef M. [email protected]:
“Value B”, 1]]
or, more concisely
irb(main):001:0> orig_array = [[“Value A”, “Value B”, 3], [“Value A”,
“Value C”, 2],[“Value A”, “Value B”, 1]]
=> [[“Value A”, “Value B”, 3], [“Value A”, “Value C”, 2], [“Value A”,
“Value B”, 1]]
irb(main):002:0> orig_array.inject(Hash.new(0)) { |hash, elem|
hash[ elem[0,2] ] += elem[2]; hash }.collect { |k, v| k + [v] }
=> [[“Value A”, “Value C”, 2], [“Value A”, “Value B”, 4]]
I believe there is an even simpler solution:
irb(main):001:0> arr=[[“Value A”, “Value B”, 3], [“Value A”, “Value
C”, 2], [“Value A”, “Value B”, 1]]
=> [[“Value A”, “Value B”, 3], [“Value A”, “Value C”, 2], [“Value A”,
“Value B”, 1]]
irb(main):003:0> arr.inject(Hash.new(0)) {|ha,(a,b,c)| ha[[a,b]]+=c;ha}
=> {[“Value A”, “Value C”]=>2, [“Value A”, “Value B”]=>4}
irb(main):004:0> arr.inject(Hash.new(0)) {|ha,(a,b,c)|
ha[[a,b]]+=c;ha}.inject([]) {|re,v| re<<v.flatten}
=> [[“Value A”, “Value C”, 2], [“Value A”, “Value B”, 4]]
Of course, the most elegant solution uses #inject - in this case two
injects. 
Although, this one might be even better:
irb(main):007:0> arr.inject(Hash.new(0)) {|ha,(a,b,c)|
ha[[a,b]]+=c;ha}.map {|x| x.flatten}
=> [[“Value A”, “Value C”, 2], [“Value A”, “Value B”, 4]]
At least 1 #inject. 
Kind regards
robert