Autor Beitrag
Limster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72


Delphi 5 & 7 Enterprise
BeitragVerfasst: Mo 08.08.05 11:39 
Hallo Leute!

folgendes : Habe eine Liste mit folgendem ItemTyp:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
TMyListItem = class
  Nummer    : Integer;
  UeberNummer: Integer;
end;


Die Items in der Liste haben eindeutige Nummern und auch Uebernummern, die nur einmal als Uebernummer
vorkommt und mit hilfe der Uebernummer auf ein anderes Item in der Liste 'zeigt'.
Ist keine Uebernummer angegeben oder sie existiert als Nummer nicht, dann wird diese normal sortiert.

(stellt es euch wie eine Baumstruktur vor, wobei immer nur ein 'Child' in einer Ebene ist)

Nun soll es zb. so sortiert werden: (IT = Item)
('eingerückt' bedeutet, dass es mit der Uebernummer auf das vorherige 'zeigt')

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
IT1
  IT2
    IT8
      IT12
IT3
  IT4
    IT9
      IT13
IT7
IT10
IT14
  IT5
    IT6
      IT7
IT17


Ich glaube ich denke zu kompliziert (oder auch nicht ;)) , zumindest krieg ichs nicht passend.

folgendes reicht leider nicht aus als sortierfunktion ( List.Sort(MySort) ):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  t1 := TMyListItem (Item1);
  t2 := TMyListItem (Item2);

  if (t1.UeberNummer = t2.Nummer) then result := 1
  else if (t2.UeberNummer = t1.Nummer) then result := -1

  else if (t1.Nummer < t2.Nummer ) then result := -1
  else if (t1.Nummer > t2.Nummer ) then result := 1
  else result := 0;


Bitte kann mir wer weiterhelfen ?

Vielen Dank im Voraus,
Limbo

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Jailbird
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 127

Windows XP Pro SP2
Delphi 7 Professional
BeitragVerfasst: Mo 08.08.05 12:23 
Ich weiss jetzt nicht, ob ich dich richtig verstanden habe (drum frag ich nach).

Willst du

a) Die "Parent"-Nodes aufsteigend sortieren (also die ohne Übernummer)
b) Die "Child"-Nodes mit identischer Übernummer sortieren (der ganze Rattenschwanz nach rechts (haben die gleiche Übernummer?)
c) Beides sortieren

Und hast du die Nodes in einer TList gespeichert? (oder wo?)
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Mo 08.08.05 13:09 
Zeigt denn dein IT1 in deiner Aufstellung auch auf etwas?
Denn ansonsten könnte doch wenn jedes Listenelement auf ein anderes zeigt und nur auf eines so eine Art Ring in der Liste entstehen. Willst du die Elemente dann doppelt auflisten? einmal als untergeordnete Objekte und einmal als Beginn einer Kette?
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: Mo 08.08.05 17:01 
Ich hoffe mal, ich habe es richtig verstanden :P

Könntest du nicht einfach zuerst alle Nodes ohne UeberNummer, also die auf dem Toplevel sortieren und danach die ChildNodes anhängen, d.h. in der Liste danach einfügen. Wenn eine Nummer noch nicht vergeben ist, einfach überspringen und beim nächsten durchlauf nochmal probieren. Stell ich mir einfacher vor, als alles gleichzeitig zu versuchen....

_________________
LifeIsToShortToThinkAboutTheShortness
Limster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72


Delphi 5 & 7 Enterprise
BeitragVerfasst: Di 09.08.05 09:41 
Titel: Weitere Erklärungen
Hi!

Erstmal danke für die Antworten!

Das Problem ist folgendes:
In TMyListItem sind natürlich viel mehr Felder, habs nur zur Vereinfachung gekürzt. In der Liste sind unmengen an solchen Listitems. Die meisten haben Übernummern und ein kleiner Teil hat keine Übernummern. Nun ist es so, dass ich zuerst die ganze Liste filtere. Sprich es kommen sehr viele Listitems weg und es bleibt ein unübersichtliches Häufchen über. Nun haben da einige Übernummern, einige auch nicht, manche Übernummern existieren auch als Nummer, manche aber nicht. Also sind oft Items dabei, die auf eine Übernummer 'zeigen', die aber nicht da ist -> soll dann normal aufsteigend nach der Nummer sortiert werden. Sind Übernummern als Nummer vorhanden, so soll hinter dieser Nummer angereiht werden..

Hoffe ich hab mich richtig ausgedrückt ;)

@Jailbird :
  1. Sind Items dabei, welche keine Übernummer haben oder eine haben und die Nummer dazu aber nicht da ist, dann kann man das als 'Parent'-Node sehen und soll aufsteigend sortiert werden.
  2. Theoretisch sollte auch keine doppelte Übernummer existieren, wenn das doch geschehen sollte, durch welchen Fehler auch immer (=großes Projekt), sollte es da angereiht werden, wo´s hingehört (und vielleicht aufsteigend)
  3. Beides Sortieren wäre theoretisch überflüssig, wenn Übernummern nicht doppelt auftreten. (wenn doch siehe 2.)
Habe die Items in einer Liste gespeichert, welche von TList erbt .. kann aber in dem Fall als TList ansehen.. funktioniert gleich.

@Allesquarks:
IT1 zeigt möglicherweise (muss nicht) auf eine Nummer mittels der Übernummer, in diesem Beispiel ist die Nummer dazu aber nicht vorhanden, sonst wäre vor IT1 noch ein Item (und IT1 eingerückt)


Vielen Dank im Voraus für weitere Tips !

Grüsse,
Christoph

Moderiert von user profile iconTino: Überflüssige Zeilenumbrüche entfernt und List-Tag hinzugefügt.