Сортировка TDictionary по ключу Integer в порядке возрастания

Как я могу отсортировать TDictionary по ключу Integer в порядке возрастания в Delphi 2009?

1 ответ

Решение

Словари не сортируются и не могут быть отсортированы (кроме как по хешу, которым они являются). Вам нужно использовать другой контейнер, если вы хотите отсортировать ключи или значения. Например:

program Project1;

{$APPTYPE CONSOLE}

uses
  Generics.Collections, Generics.Defaults, SysUtils;

var
  LDict : TDictionary<integer, string>;
  i, j : integer;
  LArray : TArray<integer>;
begin
  LDict := TDictionary<integer, string>.Create;
  try
    // Generate some values
    Randomize;
    for i := 0 to 20 do begin
      j := Random(1000);
      LDict.AddOrSetValue(j, Format('The Value : %d', [j]));
    end;
    WriteLn('Disorder...');
    for i in LDict.Keys do
      WriteLn(LDict.Items[i]);
    // Sort
    LArray := LDict.Keys.ToArray;
    TArray.Sort<integer>(LArray);
    WriteLn('Order...');
    for i in LArray do
      WriteLn(LDict.Items[i]);
  finally
    LDict.Free;
  end;
  Readln;
end.
Другие вопросы по тегам