Alex2013 писал(а):Зачем такие извраты ? Обычный TStringList делает тоже самое только проще и совместимее(А возможно и быстрее ).
Как вариант - да, можно и так, но если полей по которым искать несколько, то по каждому надо делать свой TStringList.
Но тут я согласен с
iskander писал(а):добавление элементов в сортированный TStringList имеет квадратичную сложность
добавит 100тыс строк в StringList - долгая пестня
Скорее всего этот вариант
iskander писал(а):Для уникальных ключей всё достаточно просто, используем хешмэп из Generics.Collections(полагаю, айдишки тоже должны быть уникальны), данные хранятся в отдельном массиве, поскольку создаётся два индекса:
будет быстрее, если он при добавлении элементов не создает копии строк, а добавляет ссылку.
Т.е. вот тут в строке NikMap.Add(Data[I].nikname, @Data[I]); первый аргумент будет добавлен ссылкой на строку или будет создаваться её копия?
- Код: Выделить всё
for I := 0 to High(Data) do begin
IdMap.Add(Data[I].id, @Data[I]); // бросит исключение, если такой ключ уже существует
NikMap.Add(Data[I].nikname, @Data[I]);
end;