OK, dann eben das komplette Problem:
Code: Alles auswählen
Structure gross ;Ganz große Struktur
*id
Name.s
Desc.s
*Termin
*Setlist
*Cash
Type.l
;usw.
EndStructure
Global NewList gross.gross()
;Ganz viele Elemente, zufällig sortiert
For a = 1 To 100
If AddElement(gross())
gross()\id = a
gross()\Name = Str(Random(100000000))
gross()\Type = Random(5)
EndIf
Next
;Wir brauchen aber nur die Elemente mit Type = 1
;also zweite Liste anlegen, die auf die erste verweist
Global NewList *ToSort.gross()
ForEach gross()
If gross()\Type = 1
If AddElement(*ToSort())
;Der Pointer-LinkedList wird nur der Pointer zu den aussortierten Elementen übergeben
*ToSort() = @gross()
EndIf
EndIf
Next
;Mal zum Test alles aussortierte anzeigen
ForEach *ToSort()
Debug Str(*ToSort()\id) + " - " + Str(*ToSort()\Type) + " - " + *ToSort()\Name
Next
;Alles nach 'Name.s' sortieren
SortStructuredList(*ToSort(), 0, OffsetOf(gross\Name), #PB_Sort_String)
;Funktioniert aber nicht
Debug ""
ForEach *ToSort()
Debug Str(*ToSort()\id) + " - " + Str(*ToSort()\Type) + " - " + *ToSort()\Name
Next
Ihr seht, ich habe zuerst eine große unsortierte Liste, von der ich aber nur
einen Teil sortieren will, nämlich alle Elemente mit 'Type.l = 1'.
Daraus erstelle ich dann diese Pointer-LinkedList und ich kann auch alles
anzeigen lassen, wie man sieht. Aber 'SortStructuredList()' funktioniert
damit nicht.
Meiner Meinung nach ist das dann ein Bug. Oder was meint ihr?
///Edit:
Bisher behelfe ich mir mit einer Hilfsstruktur:
Code: Alles auswählen
Structure gross ;Ganz große Struktur
*id
Name.s
Desc.s
*Termin
*Setlist
*Cash
Type.l
;usw.
EndStructure
Global NewList gross.gross()
;Ganz viele Elemente, zufällig sortiert
For a = 1 To 100
If AddElement(gross())
gross()\id = a
gross()\Name = Str(Random(100000000))
gross()\Type = Random(5)
EndIf
Next
;Wir brauchen aber nur die Elemente mit Type = 1
Structure ToSort
*ptr.gross
s.s
l.l
EndStructure
Global NewList ToSort.ToSort()
ForEach gross()
If gross()\Type = 1
If AddElement(ToSort())
;Der Pointer-LinkedList wird nur der Pointer zu den aussortierten Elementen übergeben
ToSort()\ptr = @gross()
ToSort()\s = gross()\Name
ToSort()\l = gross()\id
EndIf
EndIf
Next
;Mal zum Test alles aussortierte anzeigen
ForEach ToSort()
Debug Str(ToSort()\ptr\id) + " - " + Str(ToSort()\ptr\Type) + " - " + ToSort()\ptr\Name
Next
;Alles nach 'Name.s' sortieren
SortStructuredList(ToSort(), 0, OffsetOf(ToSort\s), #PB_Sort_String)
;Funktioniert!
Debug ""
ForEach ToSort()
Debug Str(ToSort()\ptr\id) + " - " + Str(ToSort()\ptr\Type) + " - " + ToSort()\ptr\Name
Next
;Alles nach '*id' sortieren
SortStructuredList(ToSort(), 0, OffsetOf(ToSort\l), #PB_Sort_Long)
;Funktioniert!
Debug ""
ForEach ToSort()
Debug Str(ToSort()\ptr\id) + " - " + Str(ToSort()\ptr\Type) + " - " + ToSort()\ptr\Name
Next