У вас неправильная структура данных, так как вам действительно нужен словарь .
Основная проблема с использованием списка состоит в том, что вы хотите искать в подмножестве сохраненной записи. Но списки не созданы для этого. Решите проблему, переписав с помощью TDictionary<Integer, Integer>
.
Я могу порекомендовать вам внимательно прочитать пример кода словаря на Embarcadero docwiki .
Ключ к словарю - это то, что вы называете comb
, а значение freq
. Чтобы добавить предмет, вы делаете это:
if Dict.TryGetValue(Comb, Freq) then
Dict[Comb] := Freq+1
else
Dict.Add(Comb, 1);
Я предполагаю, что ваш словарь объявлен так:
var
Dict: TDictionary<Integer, Integer>;
и создан так:
Dict := TDictionary<Integer, Integer>;
Вы можете перечислить словарь с помощью простого цикла for in
.
var
Item: TPair<Integer, Integer>;
...
for Item in Dict do
Writeln(Item.Key:3, Item.Value:10);
Хотя и предупреждаем, что словарь будет перечислять в нечетном порядке. Вы можете сортировать перед печатью.
Если вы хотите сохранить больше информации, связанной с каждой записью в словаре, добавьте дополнительные поля в запись.
type
TDictValue = record
Freq: Integer;
Field1: string;
Field2: TDateTime;
//etc.
end;
Тогда ваш словарь станет TDictionary<Integer, TDictValue>
.