Я создаю список хэшей в массиве и хотел бы сохранить счет, если они одинаковы.Подсчет объектов в массиве Ruby
Вот что пример хэш выглядит следующим образом:
data = {
s: y.id,
t: z.id,
count: 0
}
Я итерацию через кучу этих хэшей и толкая их на список. Мне бы хотелось, чтобы, когда значения для s
и t
уже существуют в хеше в списке, count
будет увеличиваться.
Позвольте пояснить. Пусть это мой @list
@list = [
{
s: 1,
t: 2,
count: 5
},
{
s: 1,
t: 3,
count: 5
}
]
Теперь предположим, я хочу выдвинуть следующий хэш списка:
data = {
s: 1,
t: 2,
count: 0
}
Результат @list должен выглядеть следующим образом потому, что хэш с s==1
и t==2
уже существует в списке:
@list = [
{
s: 1,
t: 2,
count: 6
},
{
s: 1,
t: 3,
count: 5
}
]
Вот где я сейчас.
@final = []
while widgets.count > 1
widget = widgets.shift
widgets.each do |w|
data = {
s: widget.id,
t: w.id,
count: 0
}
@final << data
end
end
Это просто добавляет все перестановки в список, но я хочу, чтобы предотвратить Dups когда s
и t
идентичны и просто увеличивает count
.
Надеюсь, я поняла.
Любые предложения были бы весьма полезными.
Have A посмотрите [этот вопрос] (http://stackoverflow.com/questions/4351793/is-there-a-bag-implementation-in-ruby) для общей реализации подсчитанного множества. – Sebastian
Некоторые тесты позволили бы избежать путаницы :) – Rimian
Я добавил, что я понял, что вы объяснили это - тесты были бы полезны, это правда :-) –