iskander писал(а):Alex2013 писал(а):Обычный TStringList делает тоже самое только проще и совместимее(А возможно и быстрее ).
Совместимее с чем?
Насчёт производительности: добавление элементов в сортированный TStringList имеет квадратичную сложность.
А поиск строковых ключей в хеш-таблице размера 10^5 элементов должен быть на порядок быстрее, чем в сортированном списке или двоичном дереве поиска.
1 Никто незнает что там с дженериками дальше будет. ( я когда-то вдоволь намучился с разными версиями )
2 Это если искать в несортированном TStringList (Через indexOf ) а Find ищет в сортированном массиве что огромная разница
3 Не знаю как это сейчас но ранее что-то типа IdMap.Add работало чудовищно медленно ( примерно как добавление по одному новых элементов в динамический(так и хочется написать "демонический"

) массив )
Добавлено спустя 12 минут 38 секунд:
ssnakess писал(а):Т.е. вот тут в строке NikMap.Add(Data.nikname, @Data); первый аргумент будет добавлен ссылкой на строку или будет создаваться её копия?
В данном случае копия но это не обязательно. ( досточно подменить метод сортировки через CustomSort )
Код: Выделить всё
function mySort(L : TStringList; Item1, Item2: Integer): Integer;
begin
Result := CompareStr(L[Item1], L[Item2]);
end;
procedure TMainForm.Button1Click(Sender: TObject);
var L : TStringList;
begin
//
L := TStringList.Create;
L.Add('start');
L.Add('finish');
L.Add('end');
L.Add('begin');
L.CustomSort(@mySort);
Memo1.Lines.AddStrings(L);
L.Free;
end;
(Переделывать пример лениво, но вроде всё и так "интуитивно понятно " )
Код: Выделить всё
function mySort(L : TStringList; Item1, Item2: Integer): Integer;
begin
Result := CompareStr(PData(L.Objects[Item1])^.nikname , PData(L.Objects[Item2])^.nikname);
end;
+
Код: Выделить всё
for I := 0 to High(Data) do StringList.addObject( '', TObject(@Data[I]));
(То есть можно не использовать основной массив строк, а только ссылки на Objects )
Зы
Кстати CustomSort пересортировывает то есть можно сделать mySort01, mySort02 и т.д.