Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array of string sotieren (https://www.delphipraxis.net/103754-array-string-sotieren.html)

ferby 21. Nov 2007 11:46


array of string sotieren
 
Hallo,

ich habe einen Array of String und möchte den gerne alphabetisch sotiert haben.
Hier im Forum finde ich nur sotieralgorithmen für integer arrays.

kann mir wer weiterhelfen?


Gruß,
ferby

Klaus01 21. Nov 2007 11:48

Re: array of string sotieren
 
Warum nimmst Du keine StringListe, ist mehr oder weniger auch nur ein Array von Strings,
diese kannst Du ganz einfach sortieren. Die Eigenschaft sorted auf true setzen.

Grüße
Klaus

ferby 21. Nov 2007 11:58

Re: array of string sotieren
 
Hallo,

bei mir gibts die eigenschaft sorted nicht??

meinst doch das oder:

Delphi-Quellcode:
procedure TForm1.Work3;
var
  kag: TStrings;
begin
  kag:=TStringList.Create;

  kag.sorted; <-- gibts nicht

  kag.Free;

DeddyH 21. Nov 2007 12:08

Re: array of string sotieren
 
Delphi-Quellcode:
kag.sorted := true;
[edit] Wieso definierst Du die Variable nicht gleich als TStringList? [/edit]

ferby 21. Nov 2007 12:10

Re: array of string sotieren
 
Hallo,

das wars, danke.

In der Delphi Hilfe stands so drin, ka warum^^

semo 21. Nov 2007 12:16

Re: array of string sotieren
 
Weil TStringList eine Ableitung von TStrings ist.

Da nur die TStringList über die Eigenschaft sorted verfügt,
TStrings aber nicht und du eine TStrings Instanz erzeugt hast,
kannst du nicht auf diese property zugreifen.

Lösung wie bereits genannt:

Delphi-Quellcode:
var
  //kag: TStrings;
  kag: TStringList;

quendolineDD 21. Nov 2007 20:03

Re: array of string sotieren
 
Mal als Anregung zum Fall Array.

Du kannst dir auch den vom Buchstaben zugehörigen ASCII-Code ermitteln, und eine temporäre Liste / 2dimensionales mit den ermittelten (nun Integer und somit vergleichbaren) Werten sortieren. In der ersten Spalte hast du den ermittelten Integer-Wert (ASCII-Code) und in der 2. Spalte den Index, von dem originalen Array.

So müsstest du doch auch Arrays of String sortieren können?!

mkinzler 21. Nov 2007 20:04

Re: array of string sotieren
 
Oder selber QuickSort o.ä. implementieren

Neutral General 21. Nov 2007 20:11

Re: array of string sotieren
 
Also man kann Strings auch einfach mit > < = vergleichen:

Delphi-Quellcode:
if 'Altenheim' > 'Baumhaus' then
  ShowMessage('Altenheim kommt nach Baumhaus im Alphabet!')
else
  ShowMessage('Baumhaus kommt nach Altenheim im Alphabet!');
Gruß
Neutral General

jbg 21. Nov 2007 20:28

Re: array of string sotieren
 
Zitat:

Zitat von Neutral General
Also man kann Strings auch einfach mit > < = vergleichen

Und jetzt mach aus dem großen "A" mal ein "Ä" und probiere es dann nochmal.

quendolineDD 21. Nov 2007 20:31

Re: array of string sotieren
 
Dies kann dadurch vermieden werden, das 'A' vor 'Ä' kommt aber 'A' gleichwertig mit 'a' ist.

ferby 21. Nov 2007 22:26

Re: array of string sotieren
 
danke für die Tips, aber ich hab das mit ner Stringlist gemacht,
das hat, warum auch immer, einen super neben effekt den ich auch noch gebraucht hätte:
Doppelte Einträge werden gelöscht :-)



Data.KAG steht die unsotierte Elemente in kag dann die sotierten

Delphi-Quellcode:
 kag:=TStringList.Create;
  kag.sorted := true;
  for i:=0 to anzahl_elemente-1 do kag.Add(DATA[i].KAG);

doppelte Einträge werden nicht angezeigt.

grenzgaenger 21. Nov 2007 23:19

Re: array of string sotieren
 
Zitat:

Zitat von quendolineDD
Mal als Anregung zum Fall Array.

Du kannst dir auch den vom Buchstaben zugehörigen ASCII-Code ermitteln, und eine temporäre Liste / 2dimensionales mit den ermittelten (nun Integer und somit vergleichbaren) Werten sortieren. In der ersten Spalte hast du den ermittelten Integer-Wert (ASCII-Code) und in der 2. Spalte den Index, von dem originalen Array.

So müsstest du doch auch Arrays of String sortieren können?!

nur mal so als hinweis, die tstringlist, ist 'n array mit methoden um dieses array of strings zu verwalten... also genau das richtige... oder zum selber schreiben ??? ;-)

MStoll 21. Nov 2007 23:41

Re: array of string sotieren
 
Hallo,

unabhängig vom Datentyp gibt's in der Code-Library 2 Beiträge mit allgemeinen Sortier-Möglichkeiten (einmal mit Objekten und einmal auf Pointer-Basis). Also einfach 'ne kleine Compare-Funktion schreiben (in diesem Fall für Strings) und dann ist man schon fertig.

Möglichkeit 1
Möglichkeit 2

Gruß
Michael

grenzgaenger 21. Nov 2007 23:53

Re: array of string sotieren
 
Zitat:

Zitat von MStoll
Hallo,

unabhängig vom Datentyp gibt's in der Code-Library 2 Beiträge mit allgemeinen Sortier-Möglichkeiten (einmal mit Objekten und einmal auf Pointer-Basis). Also einfach 'ne kleine Compare-Funktion schreiben (in diesem Fall für Strings) und dann ist man schon fertig.

Möglichkeit 1
Möglichkeit 2

Gruß
Michael

tja ganz so is es nicht. die sortieralgos die setzen bestimmte datentypen/-strukturen voraus damit sie effizient angewendet werden können. :mrgreen: :mrgreen:

MStoll 21. Nov 2007 23:59

Re: array of string sotieren
 
Zitat:

Zitat von grenzgaenger
Zitat:

Zitat von MStoll
Hallo,

unabhängig vom Datentyp gibt's in der Code-Library 2 Beiträge mit allgemeinen Sortier-Möglichkeiten (einmal mit Objekten und einmal auf Pointer-Basis). Also einfach 'ne kleine Compare-Funktion schreiben (in diesem Fall für Strings) und dann ist man schon fertig.

Möglichkeit 1
Möglichkeit 2

Gruß
Michael

tja ganz so is es nicht. die sortieralgos die setzen bestimmte datentypen/-strukturen voraus damit sie effizient angewendet werden können. :mrgreen: :mrgreen:

Wie meinste das genau?
Möglichkeit 2 setze ich bei allen möglichen Datentypen ein und das geht eigentlich immer sehr gut. Dazu braucht man nur ne Vergleichsfunktion, das Austauschen geht ja byteweise.

alzaimar 22. Nov 2007 07:06

Re: array of string sotieren
 
Na ja, wie wärs dann einfach mit einer TList und einem Sort? Dann spart man sich die ganze Rumkopiererei, die doch sowieso überflüssig ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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