Einzelnen Beitrag anzeigen

Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#16

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 10:55
Gibt's da auch eine Lösung, die nicht all zu schwer ist?


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Forms, StdCtrls, Controls;

type
  TZusatzDaten = class(TObject)
   public
     FVorname : string;
     FAlter : Integer;
     constructor Create(Vorname: string; Alter : Integer);
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
    sl : TStringList;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TZusatzDaten.Create(Vorname : string; Alter : Integer);
begin
  Self.FVorname := Vorname;
  Self.FAlter := Alter;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : Integer;
  Eintrag : TZusatzDaten;
begin
  Memo1.Clear;
  sl := TStringList.Create;

  try
    sl.AddObject('Franzen', TZusatzdaten.Create('Dieter', 36));
    sl.AddObject('Hansen', TZusatzdaten.Create('Hans', 45));
    sl.AddObject('Petersen', TZusatzdaten.Create('Klara', 21));

    // Wert an Position "Hansen" einfügen
    i := sl.IndexOf('Hansen');
    sl.InsertObject(i, 'Paulsen', TZusatzDaten.Create('Paul', 29));

    // Wert ändern
    Eintrag := TZusatzDaten(sl.Objects[0]);
    Eintrag.FVorname := 'Franz';

    // Wert anders ändern
    Eintrag := sl.Objects[3] as TZusatzDaten;
    Eintrag.FVorname := 'Peter';

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    Memo1.Lines.Append('');
    Memo1.Lines.Append('sl Sortieren');
    sl.Sort; // Sortieren

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    sl.Exchange(0,1); // die beiden Werte tauschen

    Memo1.Lines.Append('');
    Memo1.Lines.Append('Tauschen 0 & 1');

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    // Nach Alter sortieren
    for i := sl.Count -1 downto 1 do
     for j := 1 to i do
      if TZusatzdaten(sl.Objects[j-1]).FAlter > TZusatzdaten(sl.Objects[j]).FAlter
       then sl.Exchange(j-1,j);

    Memo1.Lines.Append('');
    Memo1.Lines.Append('Nach Alter sortieren');

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

  finally
     for i := 0 to sl.Count -1 do
      if Assigned(sl.Objects[i])
       then sl.Objects[i].Free;

    sl.Free;
  end;
end;

end.
  Mit Zitat antworten Zitat