Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TObjectDictionary komplett durchlaufen (https://www.delphipraxis.net/170817-tobjectdictionary-komplett-durchlaufen.html)

Kostas 4. Okt 2012 12:06

Delphi-Version: 5

TObjectDictionary komplett durchlaufen
 
Hallo Zusammen,

ich möchte gerne durch alle Einträge eines TObjectDictionary durchlaufen
und dabei die Keys und die Values abfragen. Mit ExtractPair kann ich
eigentlich genau das "Paar"(Kay,Value) abfragen. Doch leider nimmt
es ExtractPair wörtlich "Extract" und entfernt mir den Eintrag aus dem Dict.
Die Hilfe sagt, es gibt keine Hilfe.



Delphi-Quellcode:
procedure TfrmMain.SendAllStati;
var UserObject:TUserObject;
    i:integer;
    status:String;
    aPair :TPair<integer,TUserObject>;
begin
  status := 'ALLSTATI';
  for i := 0 to UserObjectDict.Count-1 do
  begin
    aPair := UserObjectDict.ExtractPair(i);
    if aPair.Value<>nil then
    begin
      status := status + Format(';%d_%d',[aPair.Key, aPair.Value.State]);
    end;
  end;
  Display(Memo3, status);
end;{SendAllStati}
Hat jemand eine Idee?

Gruß Kostas

[Edit] Auch wirklich unschön ist dass der Value.Destructor nicht gefeuert wird!
Es wird also aus der Liste entfern ohne dass das Object es mittbekommt!

Uwe Raabe 4. Okt 2012 12:17

AW: TObjectDictionary komplett durchlaufen
 
Ganz einfach:

Delphi-Quellcode:
var
  pair: TPair<<integer,TUserObject>;
...
  for pair in UserObjectDict do begin
    if aPair.Value<>nil then
    begin
      status := status + Format(';%d_%d',[aPair.Key, aPair.Value.State]);
    end;
  end;

daywalker9 4. Okt 2012 12:19

AW: TObjectDictionary komplett durchlaufen
 
So kannst Du das Dictionary durchlaufen:

Delphi-Quellcode:
for lKey in MyDict.Keys do
begin
  LValue := MyDict[lKey]; //<- value des Pair
end;

Kostas 4. Okt 2012 12:25

AW: TObjectDictionary komplett durchlaufen
 
Perfekt, genau so gehts.

Besten Dank und eine schöne Zeit.
Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz