Re[3]: Алгоритм группировки
От: Мишень-сан  
Дата: 21.03.11 13:53
Оценка:
Здравствуйте, AntonAl, Вы писали:

AA>Здравствуйте, ettcat, Вы писали:


>>> Смысл такой: есть массив: [Имя , Количество] в котором Имя повторяется, надо сделать другой массив [Имя, Сумма], где Имя — уникальный и отсортированный список из первого массива и Сумма — это сумма Количества из первого массива для повторяющихся элементов имя.


E>> Простейшее решение — сортируем массив по ключевому полю (в данном

E>>случае [Имя], после чего все повторяющиеся имена будут идти по порядку.
E>> Теперь пробегаемся по массиву — на каждом шаге, если значение
E>>ключевого поля такое же как и предыдущее — то накапливаем аккумулятор (в
E>>данном случае просто инкрементируем SUM), если нет — то выдаем
E>>[ПредыдущееИмя, SUM], зануляем аккумулятор, обновляем его текущим
E>>значением и идем дальше.

AA>Вопрос как отсортировать?


Использовать в качестве таблицы двоичное дерево.

На С++ решалось бы примерно так:
vector<pair<string, int> > items;
map<string, int> sums;
for (auto it = items.begin(), end = items.end(); it != end; ++it)
  sums[it->first] += it->second;


Как будет на VB — не знаю, к сожалению.
map даёт автоматическое упорядочивание.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.