AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TList.Sort Rückwärts?

Ein Thema von xZise · begonnen am 5. Aug 2009 · letzter Beitrag vom 14. Aug 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: TList.Sort Rückwärts?

  Alt 5. Aug 2009, 19:52
Zitat von xZise:
Ich habe mindestens 4 Methoden die ich dann doppelt habe.
Äh, nicht wirklich . Im zweiten Comparer rufst du einfach den ersten mit vertauschten Argumenten auf - immer noch perfekt DRY.

Und wenn dir das immer noch zu viel Syntax-Gewurstel drum herum ist, dann nutze doch die anonymen Methoden von D2009: TList<T> im Zusammenspiel mit TDelegatedComparer<T>.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

Re: TList.Sort Rückwärts?

  Alt 5. Aug 2009, 20:52
Zitat von Khabarakh:
Zitat von xZise:
Ich habe mindestens 4 Methoden die ich dann doppelt habe.
Äh, nicht wirklich . Im zweiten Comparer rufst du einfach den ersten mit vertauschten Argumenten auf - immer noch perfekt DRY.
Hmmmm also statt
Delphi-Quellcode:
function PublishedCompare(Item1, Item2: Pointer): Integer;
begin
  Result := CompareValue(TVersion(Item1).PublishedTime, TVersion(Item2).PublishedTime);
end;

function PublishedCompareB(Item1, Item2: Pointer): Integer;
begin
  Result := -CompareValue(TVersion(Item1).PublishedTime, TVersion(Item2).PublishedTime);
end;
soll ich
Delphi-Quellcode:
function PublishedCompare(Item1, Item2: Pointer): Integer;
begin
  Result := CompareValue(TVersion(Item1).PublishedTime, TVersion(Item2).PublishedTime);
end;

function PublishedCompareB(Item1, Item2: Pointer): Integer;
begin
  Result := PublishedCompare(Item2, Item1);
end;
aufrufen? Nicht wirklich "weniger"...

Am elegantesten wäre es direkt bei TList:
Delphi-Quellcode:
procedure QuickSort(SortList: PPointerList; L, R, F: Integer;
  SCompare: TListSortCompare);
var
  I, J: Integer;
  P, T: Pointer;
begin
  repeat
    I := L;
    J := R;
    P := SortList^[(L + R) shr 1];
    repeat
      while F*SCompare(SortList^[I], P) < 0 do
        Inc(I);
      while F*SCompare(SortList^[J], P) > 0 do
        Dec(J);
      if I <= J then
      begin
        if I <> J then
        begin
          T := SortList^[I];
          SortList^[I] := SortList^[J];
          SortList^[J] := T;
        end;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then
      QuickSort(SortList, L, J, SCompare);
    L := I;
  until I >= R;
end;

procedure TList.Sort(Compare: TListSortCompare; Backwards : Boolean = False);
var
  F : Integer;
begin
  if Backwards then
    F := -1
  else
    F := 1;
  if (FList <> nil) and (Count > 1) then
    QuickSort(FList, 0, Count - 1, F, Compare);
end;
Zitat von Khabarakh:
Und wenn dir das immer noch zu viel Syntax-Gewurstel drum herum ist, dann nutze doch die anonymen Methoden von D2009: TList<T> im Zusammenspiel mit TDelegatedComparer<T>.
1. Wollte ich das auch abwärtskompatibel gestalten
2. Gibt es irgendwo ein Tut ?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#13

Re: TList.Sort Rückwärts?

  Alt 5. Aug 2009, 22:22
Zitat von xZise:
Nicht wirklich "weniger"...
Darum ging's auch nicht , sondern wie gesagt um DRY. Duplizierte Logik ist schon deshalb schlimm, weil es einfach in fast allen Fällen ohne wirklichen Mehraufwand vermeidbar ist.
Zitat von xZise:
2. Gibt es irgendwo ein Tut ?
Für Generics oder anonyme Methoden ? Ich kann dir keines selbst empfehlen, aber bei Dr. Bob gibts beides.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

Re: TList.Sort Rückwärts?

  Alt 5. Aug 2009, 23:10
Ahcso ich kannte "DRY" bisher noch nicht

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: TList.Sort Rückwärts?

  Alt 14. Aug 2009, 14:02
Moinsen, mir ist gerade eben was aufgefallen bei den Soßen von Classes.pas:
TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer; Warum warum warum gibt es das nicht für die TList? Auch erscheint es mir so als wäre TStringList/TStrings fast so wie TList nur mit zusätzlichen Stringoperationen...

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#16

Re: TList.Sort Rückwärts?

  Alt 14. Aug 2009, 16:50
Zitat von xZise:
Moinsen, mir ist gerade eben was aufgefallen bei den Soßen von Classes.pas:
TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer; Warum warum warum gibt es das nicht für die TList? Auch erscheint es mir so als wäre TStringList/TStrings fast so wie TList nur mit zusätzlichen Stringoperationen...

MfG
xZise
Hallo,

inwiefern würde das dein Problem lösen?

Und wieso leitest du dir nicht einfach eine Klasse TListEx ab und fügst der eine Methode SortReverse hinzu? Ist doch perfectly OO.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: TList.Sort Rückwärts?

  Alt 14. Aug 2009, 17:25
Moin,

es ging mir bei dem letzten Posting nur darum, dass Borland schon mal daran gedacht hat die Liste nach der sortiert wird mit zu übergeben. TList nämlich tut dies nicht. Das hat mich so ein bisschen enttäuscht, da der Code ja nicht von gestern ist. Sondern schon "uralt" und Borland nicht auf die Idee gekommen ist dies zu ändern.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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