| Autor |
Nachricht |
Jan_
Unregistrierter
|
Jan_ Unregistrierter
18:45:00 04.12.2002 Titel: |
StringList absteigend sortieren (CustomSort) |
Zitieren |
Hallo,
wenn ich das richtig sehe kann die TStringlist nur aufsteigend sortieren. Welche Möglichkeit habe ich denn die Liste abwärts zu sortieren? Muss man das selber programmieren? |
Zuletzt bearbeitet von Jansen am 13:44:57 21.01.2004, insgesamt 1-mal bearbeitet |
|
 |
Werbeunterbrechung
|
|
 |
TripH
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 628
|
TripH Mitglied
20:46:00 04.12.2002 Titel: |
|
Zitieren |
Wenn du's dir einfach machen willst, erstell halt eine zweite StringList, geh die erste (sortierte) Liste rückwärts mit einer for-schleife durch und bring das Element der ersten Liste an das Ende der zweiten (per Add()).
Diese Lösung ist aber weder schön, noch elegant oder schnell. Eigentlich ist sie sogar unter aller Sau, aber dafür schön einfach |
|
|
|
 |
Jan
Unregistrierter
|
Jan Unregistrierter
22:31:00 04.12.2002 Titel: |
|
Zitieren |
Das mit der zweiten Liste ist doch gar keine schlechte Idee. Also ich weiss jetzt nicht warum das nicht schön oder elegant sein soll. Das ist doch bestimmt sicherer und schneller als wenn man sich selber was bastelt. |
|
|
|
 |
Jansen
Moderator
Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 14618
|
Jansen Moderator
23:03:00 04.12.2002 Titel: |
|
Zitieren |
Nö, weil man nichts selber basteln muss. Zumindest nicht seit dem BCB5, denn ab da gibt es TStringList::CustomSort. Damit kann man nach Belieben sortieren, natürlich auch rückwärts:| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Callback-Funktion, die das eigentliche Sortieren übernimmt
int __fastcall SortBackwards(TStringList *list, int Item1, int Item2)
{
// das Minus sorgt dafür, dass das Vergleichsergebnis umgekehrt wird
return -CompareText(list->Strings[Item1], list->Strings[Item2]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *list = new TStringList();
list->CommaText = "3,6,2,8,1,2,9";
list->CustomSort(SortBackwards); // Aufruf der Callback-Funktion
Memo1->Lines = list;
delete list;
}
//--------------------------------------------------------------------------- | | Anzumerken ist noch, dass die Callback-Funktion nicht als Klassenmethode (zB. der Form) deklariert werden darf.
[ Dieser Beitrag wurde am 07.12.2002 um 09:40 Uhr von Jansen editiert. ] |
_________________ Jansen (Mod nur im BCB-Forum)
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|