Я не считаю хеш-таблицу извращением просто мне показалось что для этой задачи она избыточна .iskander писал(а):Потрясающе веский аргумент из уст человека, прожившего уже почти четверть 21 века и по сию пору считающего хеш-таблицу извращением.
Поиск строки в массиве
Модератор: Модераторы
Последний раз редактировалось Alex2013 15.12.2023 22:31:53, всего редактировалось 1 раз.
Креститься надо, когда мерещится всякое непотребство.Alex2013 писал(а):Я не считаю хеш-таблицу извращением просто мне показалось что для этой задачи она избыточна .
Find действительно быстрее IndexOf
Но увы (Сори, тут я точно поспешил не проверив
) это не будет работать с CustomSort и пустым списком строк ...
(Хотя это не великая проблема но признаю что "изящества" уже не будет (придется делать свою процедуру поиска ) )
Зы
Но все-же CustomSort действительно существует .
Зы Зы
Возможно все это проще будет сделать через более "низкоуровневый" ТList там тоже есть механикка для сортировки
Добавлено спустя 59 минут 14 секунд:
По поводу дженериков: что-то я не видел, что их начинают массово применять в новых релизах LCL что (ИМХО) плохой знак.
Код: Выделить всё
function TStringList.Find(const S: string; out Index: Integer): Boolean;
var
L, R, I: Integer;
CompareRes: PtrInt;
begin
Result := false;
Index:=-1;
if Not Sorted then
Raise EListError.Create(SErrFindNeedsSortedList);
// Use binary search.
L := 0;
R := Count - 1;
while (L<=R) do
begin
I := L + (R - L) div 2;
CompareRes := DoCompareText(S, Flist^[I].FString);
if (CompareRes>0) then
L := I+1
else begin
R := I-1;
if (CompareRes=0) then begin
Result := true;
if (Duplicates<>dupAccept) then
L := I; // forces end of while loop
end;
end;
end;
Index := L;
end;
Но увы (Сори, тут я точно поспешил не проверив
(Хотя это не великая проблема но признаю что "изящества" уже не будет (придется делать свою процедуру поиска ) )
Зы
Но все-же CustomSort действительно существует .
Код: Выделить всё
procedure TStringList.CustomSort(CompareFn: TStringListSortCompare);
begin
If (FCount>1) and (FForceSort or (FSortStyle<>sslAuto)) then
begin
Changing;
QuickSort(0,FCount-1, CompareFn);
Changed;
end;
end;
Возможно все это проще будет сделать через более "низкоуровневый" ТList там тоже есть механикка для сортировки
Добавлено спустя 59 минут 14 секунд:
По поводу дженериков: что-то я не видел, что их начинают массово применять в новых релизах LCL что (ИМХО) плохой знак.
А кто-нибудь подвергал это сомнению?Alex2013 писал(а):Find действительно быстрее IndexOf
Да, и желательно на ассемблере.Alex2013 писал(а):Возможно все это проще будет сделать через более "низкоуровневый" ТList
Вангую: если Абракадабре вдруг вздумается переписать свой легаси VCL на генериках, то вполне можешь и увидеть. Но это вряд ли.Alex2013 писал(а):По поводу дженериков: что-то я не видел, что их начинают массово применять в новых релизах LCL что (ИМХО) плохой знак.
Ладно ладно уел ! ( признаю, что нужно быть внимательнее... ) Поделом мне.iskander писал(а):Да, и желательно на ассемблере.
Просто я к тому, что сегодня поддержка джнериков есть, а завтра её может не быть или появится их свершено новая версия (как уже бывало ) . Тем более в LCL не VCL, а ее аналог. А вечно сидеть на старой версии компилятора и лазаруса не получится в принципе. (Если даже с исходным кодом из середины а то и конца 10- х уже туча проблем то что будет дальше? ) Так что без особой нужды юзать "не устоявшуюся технологию" (ИМХО) так себе идея .iskander писал(а):Вангую: если Абракадабре вдруг вздумается переписать свой легаси VCL на генериках, то вполне можешь и увидеть. Но это вряд ли.
.
Если правильно помню, "неустоявшаяся технология" впервые появилась в FPC-2.2.0, то есть примерно 16 лет назад.iskander писал(а):Так что без особой нужды юзать "не устоявшуюся технологию" (ИМХО) так себе идея .
А разве было такое? Что-то не могу припомнить.Alex2013 писал(а):сегодня поддержка джнериков есть, а завтра её может не быть или появится их свершено новая версия (как уже бывало )
Начал писать небольшую программку для построения индекса и поиска файлов в нем. Поиск полнотексный. Код специально упрощен.
Так как написание в процессе. Ещё не до конца готова. Надо небольшие штрихи поправить в логике обработки запроса.
https://gitlab.com/pavia00/textlib
Добавлено спустя 1 минуту 8 секунд:
В дальнейшем планирую полную замену персональному поиску от Яндекса.
Так как написание в процессе. Ещё не до конца готова. Надо небольшие штрихи поправить в логике обработки запроса.
https://gitlab.com/pavia00/textlib
Добавлено спустя 1 минуту 8 секунд:
В дальнейшем планирую полную замену персональному поиску от Яндекса.
Было при переходе к третей версии FPC (или 3.2.0) и когда была мода на странные тральные версии типа 3.2.1 и т.п. ( плюс чуть "плавали" модули поддержки )iskander писал(а):А разве было такое? Что-то не могу припомнить.
LCL в прямой зависимости от VCL по совместимости, как тока там, так тут же здесь.Alex2013 писал(а):По поводу дженериков: что-то я не видел, что их начинают массово применять в новых релизах LCL что (ИМХО) плохой знак.
при этом VCL на дженериках как то уныло получается, например, свойство Items: TStrings, по идее должно стать Items: TStrings<E is TObject> и что, при бросани TListBoxа на форму спрашивать что подставить вместо E? а как его задавать? TListBox<E is TObject> а Items: TStrings<E> ? и в "дфм" по умолчанию писать ListBox1: TListBox<TObject>? как то криво, сделать перегружаемый тип синоним для TStrings<E is TObject>, TStrings = TStrings<TObject>, тогда смысл теряется дженерика,
и это еще без учета что TStrings абстрактный класс, надо как то сделать проброс E на реализацию TStringList, property Items: TStrings<E is TObject> => FItems: TStringList<E is TObject>
кароче мутное это дело
Так генерики-то тут причём? Емнип проблемы были связаны с введением codepage-aware строк.Alex2013 писал(а):Было при переходе к третей версии FPC (или 3.2.0) и когда была мода на странные тральные версии типа 3.2.1 и т.п.
