Hallo zoidberg,
es hängt von dem verwendetem Sortieralgorithmus (z.B. QuickSort, BubbleSort, etc.) ab, in wieweit eine bereits existierende Sortierung bei einer erneuten Sortierung durcheinander gewürfelt wird.
Bei dem von "SortStructuredList" verwendeten Algorithmus handelt es sich vermutlich um den rekursiv arbeitenden QuickSort.
Bei dem QuickSort-Algorithmus handelt es sich um ein sogenanntes
instabiles Sortierverfahren welches keinerlei Rücksicht auf eine bereits bestehende Sortierung nimmt und sich im Grunde ausschließlich um eine möglichst schnelle Sortierung des aktuell relevanten Bereiches kümmert. Dabei wird eine evtl. zuvor bereits bestehende Sortierung vollkommen ausser Acht gelassen und zum Teil sehr stark durcheinandergewürfelt.
Im Grunde müsstest Du ein spezielles "Sortierfeld" anlegen, welches die beiden Felder, nach denen Du sortieren möchtest, hintereinander enthält und dann nach diesem zusätzlichen Feld sortieren - dann klappt's auch mit dem QuickSort.
Auf Deinen speziellen Fall bezogen, erreichst Du dies aber auch ganz einfach dadurch, dass Du
die Reihenfolge Deiner beiden Byte-Werte in Deiner Struktur etwas änderst und dann "SortStructuredList" nach einem
Word (also nach den beiden aufeinander folgenden Bytes) sortieren lässt (siehe abgeändertes Beispiel):
Code: Alles auswählen
Structure TEST
position.b ;<<<<<<<<<<< Änderung
spieler.b ;<<<<<<<<<<< Änderung
farbe.b
EndStructure
Global NewList karten.test()
For q = 1 To 4
For w = 1 To 10
AddElement(karten())
karten()\spieler = q
karten()\position = w
karten()\farbe = Random (4)+1
Next w
Next q
SortStructuredList(karten(),0,OffsetOf(TEST\farbe), #PB_Sort_Byte)
OpenWindow(0, 10, 10, 500, 400, "Testfenster")
CreateGadgetList(WindowID(0))
ListViewGadget(0, 10, 10, 400, 300)
SortStructuredList(karten(),0,OffsetOf(TEST\position), #PB_Sort_Word) ;<<<<<<<<<<< Änderung
ForEach karten()
AddGadgetItem(0, x, "Spieler: "+Str(karten()\spieler)+" Position: "+Str(karten()\position)+" Farbe: "+Str(karten()\farbe))
x=x+1
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Als Resultat erhältst Du dann die gewünschte Sortierreihenfolge.
Gruß, PureLust.