![]() |
Sortiermethode mit TStringlist zurückverfolgen?
Hallo,
mir stellt sich eine Aufgabe und zwar habe ich ein StringGrid, dass mit Daten aus einer Datenbank gefüllt ist. Nun ist es per Programm möglich, sich über die Spalten eine Sortierreihenfolge zu definieren. Ich erstelle nun eine StringList, wobei jeder String aus dem Stringgrid zusammengesetzt wird, dieser kann je nach Zeile unterschiedliche Spalten haben. Das sortieren ist ja jetzt nun nicht das Problem, sondern, dass ich einen Index brauche, wo jeder Datensatz vorher im Grid war (für weitere Verarbeitungen). Gibt es noch andere Möglichkeit als mit Objekten zu arbeiten?
Delphi-Quellcode:
type
TRfolge= class(TObject) position:integer; end; // ... slist:=TStringList.Create; // strings zusammensetzen for zeile:=0 to bis do begin s:=''; for spalte:=0 to 3 do // nur für das beispiel, sonst unterschiedliche spalten s:=s+stringgrid2.Cells[spalte,zeile]; // zu sortierender String nr:=TRfolge.Create; nr.position:=zeile; // index merken slist.AddObject(s,nr); end; slist.Sort; //... weitere Verarbeitung // objekte freigeben for zeile:=0 to bis do (slist.Objects[zeile] as TRfolge).Free; sList.Free; |
Re: Sortiermethode mit TStringlist
Hi ibp,
Brauchst du denn unbedingt ne TStringList? Sonst würde ich dir ein Record empfehlen:
Delphi-Quellcode:
Davon legst du dir ein dynamisches Array an, und kannst das ganze dann mit nem Quicksort sortieren.
type TEintrag = Record
Inhalt : string; Position : Integer; end; Gruß, Thanatos81 |
Re: Sortiermethode mit TStringlist
Zitat:
Ich versuche arrays zu vermeiden, wenn es geht, da Datensätze hinzukommen können, ist dei Behandlung mit einer StringList einfacher! |
Re: Sortiermethode mit TStringlist zurückverfolgen?
Hoi
Du brauchst ja nicht unbedingt Objekte zu erstellen:
Delphi-Quellcode:
tuts auch. Dann fällt schon mal Create und Free weg.
slist.AddObject(s,TObject(Position));
Gruss Shaman |
Re: Sortiermethode mit TStringlist zurückverfolgen?
Zitat:
|
Re: Sortiermethode mit TStringlist zurückverfolgen?
Gar nicht, da die Position nur eine Zahl ist, die als Zeiger behandelt wird.
Da dahinter ja kein Objekt steckt braucht auch nichts freigegeben werden. |
Re: Sortiermethode mit TStringlist zurückverfolgen?
Wird nicht vielmehr eine Box um Position angelegt um es als Objekt benutzen zu können?
Diese Box müsste sehr wohl freigegeben werden. Oder vermische ich jetzt schon wieder .Net mit Delphi32? :freak: :gruebel: |
Re: Sortiermethode mit TStringlist zurückverfolgen?
was passiert nun hiermit eigentlich genau?, ist das nun ein object und muss das freigegeben werden oder nicht?
Delphi-Quellcode:
stringlist.AddObject(s,TObject(Position))
|
Re: Sortiermethode mit TStringlist zurückverfolgen?
@ibp:
Delphi-Quellcode:
ist ein explizites Typecasting. Dabei wird Delphi dazu gezwungen die Ganzzahl (Position) als ein Zeiger auf TObject anzusehen.
TObject(Position)
Ausgeschrieben bedeutet das in etwa: Behandle "Position" als wäre es ein Zeiger. Da ein Zeiger auch nichts anderes als eine Ganzzahl ist, sind die beiden Typen ja kompatibel. Nur, weil Delphi so tun soll, als wäre es ein Zeiger heisst das allerdings noch lange nicht, das dort auch ein gültiges Objekt existiert. Wo sollte das auch herkommen? @Robert_G: Wieso muss in .NET was freigegeben werden? Ich dachte dort gibt es einen Garbage-Collector... |
Re: Sortiermethode mit TStringlist zurückverfolgen?
Zitat:
Ich war mir jetzt nicht mehr sicher, ob Delphi das auch macht. Ich "arbeite" schließlich nicht mehr damit sondern nutze es nur für ein paar private Spielereien. Aber selbst wenn ich damit arbieten würde, mir würde es im Traum nicht einfallen sowas zu machen. Ist irgendwie unsauber und unschön. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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-2025 by Thomas Breitkreuz