![]() |
Codelibrary Mengenoperation, Änderungsvorschlag?
Hi,
eine Anmerkung bzw. Frage zu diesen Beitrag in der Code-Library: ![]() Müsste diese Funktion
Delphi-Quellcode:
procedure DifferenceStrings(const a, b, diff: TStrings);
var i, idx : Integer; begin Assert(Assigned(a)); Assert(Assigned(b)); Assert(Assigned(diff)); diff.BeginUpdate; try diff.Assign(a); for i := 0 to b.Count -1 do begin idx := diff.IndexOf(b.Strings[i]); if idx >= 0 then diff.Delete(idx); end; finally diff.EndUpdate; end; end; Nicht korrekterweiße so aussehen?
Delphi-Quellcode:
procedure DifferenceStrings(const a, b, diff: TStrings);
var i, idx : Integer; begin Assert(Assigned(a)); Assert(Assigned(b)); Assert(Assigned(diff)); diff.BeginUpdate; try diff.Assign(a); for i := 0 to b.Count -1 do begin idx := diff.IndexOf(b.Strings[i]); if (idx >= 0) and (i < idx) then begin diff.Delete(idx); end; end; finally diff.EndUpdate; end; end; LG |
AW: Codelibrary Mengenoperation, Änderungsvorschlag?
Hallo Monday,
nein, der Original-Code ist korrekt, denn nach ![]() Zitat:
Delphi-Quellcode:
ist idx die Position des eventuellen Duplikats in diff, und diese ist immer kleiner oder gleich als b.Count -1, was dem Element mit dem höchsten Index entspricht. diff.Count - 1, was dem Element mit dem höchsten Index in diff entspricht.
for i := 0 to b.Count -1 do
begin idx := diff.IndexOf(b.Strings[i]); if idx >= 0 then diff.Delete(idx); end; Gruß, Andreas [Edit] Anstelle von
Delphi-Quellcode:
verwende ich generell den – nach meiner Meinung etwas schnelleren - Vergleich
if idx >= 0 then
Delphi-Quellcode:
, aber das ist nur Schnickschnack.
if idx > -1 then
|
AW: Codelibrary Mengenoperation, Änderungsvorschlag?
Sehe da nicht so den grossen Unterschied:
Code:
Testpas.247: if Idx >= 0 then
4B0F08B8 837DFC00 cmp dword ptr [ebp-$04],$00 4B0F08BC 7C05 jl $4b0f08c3 Testpas.249: if Idx > -1 then 4B0F08C3 837DFCFF cmp dword ptr [ebp-$04],-$01 4B0F08C7 7E05 jle $4b0f08ce |
AW: Codelibrary Mengenoperation, Änderungsvorschlag?
Hallo Freimatz,
ich sagte doch, es ist Schnickschnack. Aber gemeint habe ich nicht die konkrete Umsetzung von Delphi, sondern die interne Implementierung der Prozessorbefehle "Kleiner" jl und "Kleiner oder gleich" jle. Nach meinen Tests liegt hier ein geringer Geschwindigkeitsvorteil für jl von maximal bis zu 2 % vor. Also nicht die Rede wert... Gruß, Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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 by Thomas Breitkreuz