Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
ВнизСлияние двух стринглистов Найти похожие ветки
← →
harisma © (2011-03-10 17:40) [0]Есть 2 стринглиста. В каждом из них есть некоторое количество строк.
Каждая строка имеет следующий вид:
<идентификатор из 16 символов>|F<число>
В пределах каждого из стринглистов <идентификатор из 16 символов> есть величина уникальная.
Задача: Объединить эти два стринглиста в один, причем если в первом стринглисте была запись с <идентификатор из 16 символов>, которая есть также и во втором стринглисте, но с другим значением F<число>, то в результирующий стринглист должна попасть запись, взятая из второго стринглиста.
Как это сделать, чтобы код быстро работал?
← →
Conflict © (2011-03-10 17:50) [1]Берется эти 2 стринглиста. сравниваются каждый элемент первого с каждым элементом второго в цикле. Если не находим совпадений по Name- пишем в третий стринглист пару данных из первого. Если находим совпадения по Name, то пишем в результирующий список только пару данных из второго стринглиста. Далее результирующий стринглист сравниваем со вторым и если совпадений нет с элементом второго, то записываем его в результирующий, иначе пропускаем. Можно еще при совпадениях и после записи в результирующий список на первом этапе делать эти элементы пустыми в обоих списках, тогда можно будет пропускать пустые элементы на втором этапе.
← →
sniknik © (2011-03-10 17:53) [2]с "некоторым количеством строк" что угодно будет работать быстро (если специально задержек не ставить), т.е. это еще умудриться нужно...
а вот с "каким то количеством"... тут база нужна, и ни в коем случае не стринглист.
← →
harisma © (2011-03-10 18:14) [3]Ну, количество записей в соединяемых стринглистах при всем желании в том месте, где это должно использоваться, не превысит 2000 элементов.
← →
_Юрий (2011-03-10 18:50) [4]
> Как это сделать, чтобы код быстро работал?
Заводим третий стринг лист. Сортед выставляем в тру.
В строках - <идентификатор из 16 символов>, в обжектсах - индекс строки в первом стринг-листе.
Сначала проходим по первому стринглисту, заполняем третий
потом проходим по второму, для поиска соответствия используем третий.
← →
Германн © (2011-03-10 18:54) [5]
> <идентификатор из 16 символов>|F<число>
>
Заменить на <идентификатор из 16 символов>=<число>. И для поиска использовать IndexOfName.
← →
_Юрий (2011-03-10 18:55) [6]а если порядок следования строк в листе не важен, то просто отсортировать первый список, и использовать Find
← →
_Юрий (2011-03-10 18:57) [7]
> Германн © (10.03.11 18:54) [5]
IndexOfName не будет использовать сортированность, а будет перебирать подряд. По скорости может быть критично.
← →
sniknik © (2011-03-10 19:38) [8]> не превысит 2000 элементов.
ну так, а чего париться то? фигня а не количество.
только специально вставленные задержки, либо нарочно кривая работа, хоть как то отразится на скорости...
← →
KilkennyCat © (2011-03-10 19:50) [9]
> Германн © (10.03.11 18:54) [5]
> Юрий (10.03.11 18:57) [7]
о фигне спорите. тупое сравнение строковых идентификаторов равносильно сравнению чисел.
← →
Стенка © (2011-03-10 20:06) [10]Выставить сортед=тру в обоих списках,
затем пройтись по ним алгоритмом,
похожим на слияние.
← →
han_malign (2011-03-11 08:48) [11]
> алгоритмом, похожим на слияние
- прямо так и называется:
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC
← →
Стенка © (2011-03-11 09:09) [12]> han_malign (11.03.11 08:48) [11]
От автора темы потребуется небольшая переработка алгоритма слияния,
поэтому и было использовано словосочетание "алгоритм, похожий на слияние"
← →
Сергей М. © (2011-03-11 10:13) [13]ResultList.Assign(List2);
ResultSL.Sort;
ResultSL.Duplicates := dupIgnore;
ResultSL.AddStrings(List1);
← →
Сергей М. © (2011-03-11 10:19) [14]Да, ну и самое важное упустил : ResultList есть наследник TStringList с перекрытым методом CompareStrings
← →
sniknik © (2011-03-11 10:21) [15]> Заменить на <идентификатор из 16 символов>=<число>.
проще NameValueSeparator:= "|";
> От автора темы потребуется ...
от автора требуется сделать хоть что нибудь... и после, если будет долго, показать здесь чтобы мы посмеялись над теми ляпами которыми он умудрился этого добиться.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c