![]() |
AW: Zwei Listen filtern Denkproblem
Delphi-Quellcode:
Ungetestet und auch nicht wirklich performant, müsste aber tun.
for j := Staedte2.Count - 1 downto 0 do
begin Stadt1 := Staedte2.Strings[j].Split([','])[0]; Stadt2 := Staedte2.Strings[j].Split([','])[1]; if (Staedte1.IndexOf(Stadt1) < 0) or (Staedte1.IndexOf(Stadt2) < 0) then Staedte2.Delete(j); end; |
AW: Zwei Listen filtern Denkproblem
Eine kurze Lösung und die verstehe ich zum Glück auch. Ich führe das nur ein mal aus. Es dauert zwar eine ganze Sekunde aber ich glaube das ist verkraftbar.
Schneller wär immer schön aber damit bin ich erst einmal zufrieden. Wäre es schneller die StringList durch eine TObjectList mit Klasseninstanzen zu ersetzen wo jede Klasse nur ein FCity: string hat? Die THashedStringList ist zwar schon etwas schneller aber auch nicht viel. |
AW: Zwei Listen filtern Denkproblem
Wieso nicht ungefähr so:
Delphi-Quellcode:
XD zu lange noch nebenbei was anderes gemacht^^ DeddyH war daher schneller und hat dei komplette Lösung^^
//Erst der Befehl zum lesen der einzelnen Städte
//dann folgende if abfrage if Stadte1.indexof('zu suchender Stadtname') = -1 then begin //Hier der Code zum löschen der Stadte in der Staedte2 StL end; |
AW: Zwei Listen filtern Denkproblem
Ich hatte auch einen zweiten Denkfehler drin. ich hatte um das IndexOf noch eine schleife die durch die StringList geht. Deswegen dauerte das auch 1 Sekunde.
|
AW: Zwei Listen filtern Denkproblem
Zitat:
Delphi-Quellcode:
Wenn man auf das Split verzichten will, kann man das alternativ auch mit dem NameValueSeparator erreichen:
var
dummy: Integer; tempArr: TArray<string>; ... Staedte1.Sorted := True; for j := Staedte2.Count - 1 downto 0 do begin tempArr := Staedte2[j].Split([',']); Stadt1 := tempArr[0]; Stadt2 := tempArr[1]; if not Staedte1.Find(Stadt1, dummy) or not Staedte1.Find(Stadt2) then Staedte2.Delete(j); end;
Delphi-Quellcode:
Staedte1.Sorted := True;
Staedte2.NameValueSeparator := ','; for j := Staedte2.Count - 1 downto 0 do begin Stadt1 := Staedte2.Names[j]; Stadt2 := Staedte2.ValueFromIndex[j]; if not Staedte1.Find(Stadt1, dummy) or not Staedte1.Find(Stadt2, dummy) then Staedte2.Delete(j); end; |
AW: Zwei Listen filtern Denkproblem
Zitat:
|
AW: Zwei Listen filtern Denkproblem
Zitat:
|
AW: Zwei Listen filtern Denkproblem
Eine Andere Idee hatte ich eben. Ich habe der Klasse der zweiten Liste ein Property verpasst was auf True gesetzt wird, wenn der Eintrag ignoriert werden soll.
Damit fällt das Löschen schon einmal weg. Ansonsten nutze ich jetzt die HashedStringList aus TIniFiles. Das dauert jetzt alles keinen Wimpernschlag mehr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz