Каким образом реализовать быстрое сравнение таблиц?
Всем привет.
Есть, допустим 3 таблицы с полями:
бренд | артикул | цена
Нужно сагрегировать из трёх файлов "один".
бренд | артикул | цена1 | цена2 | цена3
Каким образом можно сравнить 3 таблицы?
Разумеется можно запустить цикл и сравнивать каждую строку каждой таблицы с двумя другими. Но... Когда таких позиций 100 000+ - разумеется на это уйдёт слишком много времени и памяти.
Сейчас нет идей абсолютно, какой бы алгоритм из "классики жанра" мог бы мне сейчас помочь...
Kot Matpockuh, собираете всё в одну таблицу, сортируйте по бренду/артикулу и сравнивайте, быстрее один фиг не получится. Обычно для такого используют базы данных, складываете данные в таблицу и одним запросом быстро выбираете что нужно
Для правильного вопроса надо знать половину ответа
"Таблицы" - это массивы в памяти? Тогда сортировать все массивы по бренду и артикулу, затем двигаясь параллельно по всем трём массивам сформировать общий.
да, изначально таблицы xslx, загнанные в память...
дело в том, что они не одной размерности, где то 50 позиций, где то 100000
+ не очень понял что вы имелли ввиду под параллельно?
Kot Matpockuh, Алгоритм, аналогичный сортировке слиянием.
0. Сортируем каждую таблицу по возрастанию пары бренд/артикул.
1. Ставим указатели на начало отсортированных таблиц.
2. По указателям получаем текущие пары бренд/артикул из каждой таблицы.
3. Находим из этих пар минимальную, обозначим как min.
4. Для каждой из исходных таблиц, где текущая пара бренд/артикул равняется min переписываем значение в результирующую таблицу и передвигаем указатель исходной таблицы на следующую строку.
5. Повторяем с шага 2, пока все таблицы не закончатся.
Если решать задачу неалгоритмически, то я бы использовал SQLite (в памяти) или другую РСУБД (временную таблицу):
можно построчно вставлять значения, затем написать SQL запрос, производящий выборку с подходящей агрегацией.