Hansa, welche Methode ist eigentlich schneller? Deine in Fachkreisen genannte 'Downto'-Methode, oder das Vertauschen? Soweit ich mich erinnere, ging es im Post darum.
Zitat von
Hansa:
Und elegant ist
IMHO lesbarer Quelltext.
Den Quelltext der Exchange-Methode sieht man doch nicht.
Aber wenn Du schon so argumentierst, dann ist erstens jede Stringzuweisung unelegant, da der Compiler ja 'Magic' mit reincodiert, und zweitens die Add-Methode auch nicht gerade elegant. Da wird erst zu AddObject gesprungen, um dann zu InsertItem zu springen und dann wird u.U. erstmal der gesammte Speicher vergrößert und umkopiert, damit danach nochmal Speicher verschoben wird. Ahhhh ja., Äh.. *räusper*.. Elegant?
Also, Hansa, ich weiss nicht.
Delphi-Quellcode:
function TStringList.Add(const S: string): Integer;
begin
Result := AddObject(S, nil);
end;
function TStringList.AddObject(const S: string; AObject: TObject): Integer;
begin
if not Sorted then
Result := FCount
else
if Find(S, Result) then
case Duplicates of
dupIgnore: Exit;
dupError: Error(@SDuplicateString, 0);
end;
InsertItem(Result, S, AObject);
end;
procedure TStringList.InsertItem(Index: Integer; const S: string; AObject: TObject);
begin
Changing;
if FCount = FCapacity then Grow;
if Index < FCount then
System.Move(FList^[Index], FList^[Index + 1],
(FCount - Index) * SizeOf(TStringItem));
with FList^[Index] do
begin
Pointer(FString) := nil;
FObject := AObject;
FString := S;
end;
Inc(FCount);
Changed;
end;
Elegant sieht anders aus.
Zitat von
Hansa:
Wer meine 7 relevanten Zeilen nicht versteht, der tut mir leid.
Och, das ist nicht das Problem. das Problem scheint zu sein, das Du die drei(!) relevanten Zeilen vom bluesbear, die zudem noch schneller sind, nicht als kürzer, schneller, leichter zu lesen und eleganter empfindest. Oder ist ein Codefragment mit mehr als doppelt so viel Zeilen, das lahm ist, etwa elegant?
Lern mal wieder argumentieren. So wird das nix mehr.