Zitat von
thkerkmann:
Delphi-Quellcode:
while not Terminated and (i < Sourcelist.Count) do
...
Doch, da Terminate eine andere Bedeutung und einen anderen Wert haben kann als abbruch.
Was die non-break-Variante betrifft, so hat sie den "Vorteil", dass ich eine Variable und eine Bedingung mehr in der Schleife habe. Macht aber keinen grossen Unterschied, ist Geschmacksache, und
OT.
Was die Schleife an sich betrifft, so ist an der schleife selbst nicht viel zu optimieren.
Ein Compiler wuerde daraus lediglich sowas basteln:
Delphi-Quellcode:
if not Terminated then
for i := 0 to SourceList.Count - 1 do
begin
iFindResult := DestList.IndexOf(SourceList.Strings[i]);
if iFindResult <> -1 then
begin
// Zu einer dritten Liste hinzufügen
end
else
break;
end;
und das auch nur, weil Terminated hier nicht bearbeitet wird. (Ich denke mal, Terminated wird durch ein Ereignis gesetzt, und hier fehlt lediglich ein ProcessMessages). Ein kleines bisschen wuerde sich durch ein iFindResult < 0 geben, aber einen bemerkbaren Geschwindigkeitsschub wuerde das auch nicht bringen.
Eine Optimierung ist hier - soweit ich das sehen kann - nur im Loesungsansatz moeglich. Denn nach diesem Algorithmus muessen n*m Vergleiche durchgefuehrt werden. Und bei entsprechend grossen Listen kostet dies entsprechend viel Zeit.
Eine Sortierung der Liste wuerde die Laufzeit teils reduzieren (auf ca. O(n*log2(m))), wieviel eine HashedList bringt, weiss ich nicht, duerfte aber noch mehr Geschwindigkeitsschub liefern.
greetz
Mike