Ruby: добавление второго элемента в массив, где первый элемент совпадает - PullRequest
1 голос
/ 13 мая 2010
[[1, 20],[2,30],[1,5],[4,5]]

В ruby, как пройти через этот массив и добавить второй элемент, если первый совпадает с, и вывести, например:

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

Ответы [ 3 ]

4 голосов
/ 13 мая 2010

Если порядок не важен, вставка пар в хеш, добавление, если ключ уже существует, и затем сглаживание хеша обратно в массив - это аккуратный способ. В ирб:

>> 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 голосов
/ 13 мая 2010

Решение в рубине :

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
1 голос
/ 13 мая 2010

Вы можете сделать это (предупреждение, вывод немного искажен, вы можете преобразовать в массив):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...