AW: TStringList abwertend sortieren
Dieses nennt sich z.B. "Natural Sort" oder Dergleichen.
Es gibt schon irgendwo fertige Funktionen für diesen Vergleich, aber im Prinzip läuft es auf das selbe Grundprinzip hinaus. Die Strings werden in Buchstaben- und Nummernblöcke aufgeteilt und dann werden von vorne nach hinten die Blöcke "getrennt" verglichen. Also ein Teil wird verglichen, bei Gleichheit wird der nächste Block verglichen und bei Ungleichheit wird dieses Ergebnis oder das letzte Ergebnis zurückgegeben. |
AW: TStringList abwertend sortieren
Definiere "all zu schwer"
|
AW: TStringList abwertend sortieren
|
AW: TStringList abwertend sortieren
Je nach Datenherkunft bist Du am schnellsten wenn Du den numerischen Teil mit führenden "0" auf gleiche Längen bringst und dann wieder einen Stringcompare verwendest.
|
AW: TStringList abwertend sortieren
ist zwar nicht meine Art trotzdem sticht mir immer wieder das "abwertend" im Titel ins Auge. Könntest du das bitte in "absteigend" ändern?
|
AW: TStringList abwertend sortieren
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. |
AW: TStringList abwertend sortieren
Lösungen findest du eventuell auch in dem Thread mit dem lustigen Namen: Intelligentes BubleSort; sortieren wie im Windows Explorer
|
AW: TStringList abwertend sortieren
Das einfachste wäre nicht Zahl+Text in der Stringliste zu hinterlegen sondern eine Liste zu nehmen die zum Beispiel Records oder Objekte enthält so das du den Zahlen und Textteil direkt ansprechen kannst und nicht erst jedesmal den String in seine Bestandteile zerlegen.
|
AW: TStringList abwertend sortieren
Zitat:
Ich hoffe, das war nicht allzu falsch, aber ich arbeite mit Delphi nur einmal pro Woche in der Schule und das auch noch nicht so lange. Vor 2 Monaten wusste ich noch nicht einmal was eine TStringlist ist. Dementsprechend sind halt auch meine Kenntnisse :? Zitat:
Zitat:
|
AW: TStringList abwertend sortieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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