AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Sortiermethode mit TStringlist zurückverfolgen?
Thema durchsuchen
Ansicht
Themen-Optionen

Sortiermethode mit TStringlist zurückverfolgen?

Ein Thema von ibp · begonnen am 16. Feb 2005 · letzter Beitrag vom 17. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 13:26
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;
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#2

Re: Sortiermethode mit TStringlist

  Alt 16. Feb 2005, 13:35
Hi ibp,

Brauchst du denn unbedingt ne TStringList? Sonst würde ich dir ein Record empfehlen:
Delphi-Quellcode:
type TEintrag = Record
   Inhalt : string;
   Position : Integer;
end;
Davon legst du dir ein dynamisches Array an, und kannst das ganze dann mit nem Quicksort sortieren.

Gruß,
Thanatos81
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: Sortiermethode mit TStringlist

  Alt 16. Feb 2005, 13:42
Zitat von Thanatos81:
Hi ibp,

Brauchst du denn unbedingt ne TStringList? Sonst würde ich dir ein Record empfehlen:
Delphi-Quellcode:
type TEintrag = Record
   Inhalt : string;
   Position : Integer;
end;
Davon legst du dir ein dynamisches Array an, und kannst das ganze dann mit nem Quicksort sortieren.

Gruß,
Thanatos81
Die in StringList implementierte Sortiermethode ist imho Quicksort.
Ich versuche arrays zu vermeiden, wenn es geht, da Datensätze hinzukommen können, ist dei Behandlung mit einer StringList einfacher!
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 14:34
Hoi

Du brauchst ja nicht unbedingt Objekte zu erstellen:

slist.AddObject(s,TObject(Position)); tuts auch. Dann fällt schon mal Create und Free weg.

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 16:48
Zitat von Shaman:
Hoi

Du brauchst ja nicht unbedingt Objekte zu erstellen:

slist.AddObject(s,TObject(Position)); tuts auch. Dann fällt schon mal Create und Free weg.

Gruss
Shaman
und wie wird dann der speicher wieder freigegeben, wenn du die position als tobjekt castest?
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#6

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 16:59
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 18:52
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?
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#8

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 16. Feb 2005, 20:23
was passiert nun hiermit eigentlich genau?, ist das nun ein object und muss das freigegeben werden oder nicht?

stringlist.AddObject(s,TObject(Position))
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#9

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 17. Feb 2005, 09:21
@ibp:
TObject(Position) ist ein explizites Typecasting. Dabei wird Delphi dazu gezwungen die Ganzzahl (Position) als ein Zeiger auf TObject anzusehen.
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...
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Sortiermethode mit TStringlist zurückverfolgen?

  Alt 17. Feb 2005, 09:45
Zitat von KrasserChecker:
@Robert_G:
Wieso muss in .NET was freigegeben werden? Ich dachte dort gibt es einen Garbage-Collector...
Muss es nicht. Aber als Folge von Typensicherheit wird eine Box um den primitiven Wert gelegt (also Value types wie integer oder records werden in eine Instanz gepackt, bei der der Wert eine Art Feld ist).
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:30 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