Seite 1 von 1

Reihenfolge einer Structured List auf bestimmte Weise ändern

Verfasst: 08.07.2012 19:18
von Sunny
Nehmen wir mal an, ich habe eine Structured List, mit betsimmtem Inhalt und möchte einen bestimmten Eintrag an die erste Stelle der Liste bekommen, alle nachfolgenden Einträge sollen dann direkt hinter diesen neuen ersten Eintrag angehangen werden und dahinter sollen dann die Einträge sein, welche (vor der Änderung der Reihenfolge) vor dem nun ersten Eintrag standen.

Hier mal ein kleines optisches Beispiel zur Verdeutlichung:

Code: Alles auswählen

ORIGINAL-List:
     val_1 | val_2 | val_3
   +-----------------------
01.|   1   |   0   |   0
02.|   1   |   0   |   0
03.|   1   |   0   |   0
04.|   1   |   0   |   0
05.|   0   |   0   |   0
06.|   1   |   1   |   0
07.|   1   |   0   |   1
08.|   1   |   0   |   0
09.|   0   |   0   |   0
10.|   0   |   0   |   0

===========================

CHANGED-List:
     val_1 | val_2 | val_3
   +-----------------------
06.|   1   |   1   |   0
07.|   1   |   0   |   1
08.|   1   |   0   |   0
09.|   0   |   0   |   0
10.|   0   |   0   |   0
01.|   1   |   0   |   0
02.|   1   |   0   |   0
03.|   1   |   0   |   0
04.|   1   |   0   |   0
05.|   0   |   0   |   0
In diesem Beispiel soll die Liste so geordnet werden, dass der Eintrag, welcher bei "val_2" den Wert "1" hat (6. Eintrag) der neue 1. Eintrag sein.
Die Reihenfolge der nachfolgenden Einträge (ab dem 7. Eintrag in der Original-List) sollen ganz normal Folgen.
Zum Schluss sollen dann alle übrig gebliebenen Einträge (in der Original-Liste von 1 - 5) in ihrer vorherigen Reihenfolge an die Liste angehangen werden.

Das ist nur ein Beispiel aber der Eintrag bei dem "Val_2", den Wert "1" enthält, soll immer an die erste Stelle geordnet werden und alle weiteren einträge sollen dann wie oben beschreiben angehangen werden.

Re: Reihenfolge einer Structured List auf bestimmte Weise än

Verfasst: 08.07.2012 19:47
von Sunny
OK...
ich habe jetzt selbst eine Lösung gefunden.

So sieht der Code aus (vereinfacht):

Code: Alles auswählen

Structure strct
  val_1.b
  val_2.b
  val_3.b
EndStructure

NewList TempMyList.strct()
NewList MyList.strct()

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 0
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 1
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 1

AddElement(TempMyList())
TempMyList()\val_1 = 1
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 0
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

AddElement(TempMyList())
TempMyList()\val_1 = 0
TempMyList()\val_2 = 0
TempMyList()\val_3 = 0

Debug "ORIGINAL-List:"
ForEach TempMyList()
  Debug Str(TempMyList()\val_1) + " - " + Str(TempMyList()\val_2) + " - " + Str(TempMyList()\val_3)
Next

Debug ""
Debug "----------"
Debug ""

ForEach TempMyList()
    
  If TempMyList()\val_2 = 1
    found = 1
  EndIf
  
  If found = 1
    AddElement(MyList())
    MyList() = TempMyList()
    DeleteElement(TempMyList())
  EndIf
  
Next
ForEach TempMyList()
  AddElement(MyList())
  MyList() = TempMyList()
  DeleteElement(TempMyList())
Next


Debug "CHANGED-List:"
ForEach MyList()
  Debug Str(MyList()\val_1) + " - " + Str(MyList()\val_2) + " - " + Str(MyList()\val_3)
Next
vieleicht kann ja noch jemand anderes etwas damit anfangen oder kennt eine einfachere Möglichkeit.

Re: Reihenfolge einer Structured List auf bestimmte Weise än

Verfasst: 09.07.2012 04:11
von Demivec
Noch besser:

Code: Alles auswählen

Structure strct
  val_1.b
  val_2.b
  val_3.b
  Num.b
EndStructure

NewList MyList.strct()

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 1

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 2

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 3

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 4

AddElement(MyList())
MyList()\val_1 = 0
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 5

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 1
MyList()\val_3 = 0
MyList()\Num.b = 6

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 1
MyList()\Num.b = 7

AddElement(MyList())
MyList()\val_1 = 1
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 8

AddElement(MyList())
MyList()\val_1 = 0
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 9

AddElement(MyList())
MyList()\val_1 = 0
MyList()\val_2 = 0
MyList()\val_3 = 0
MyList()\Num.b = 10

Debug "ORIGINAL-List:"
ForEach MyList()
  Debug Str(MyList()\Num) + ": " + Str(MyList()\val_1) + " - " + Str(MyList()\val_2) + " - " + Str(MyList()\val_3)
Next

Debug ""
Debug "----------"
Debug ""

;
While FirstElement(MyList())
  If MyList()\val_2 = 1
    Break
  EndIf
  MoveElement(MyList(), #PB_List_Last)
Wend


Debug "CHANGED-List:"
ForEach MyList()
  Debug Str(MyList()\Num) + ": " + Str(MyList()\val_1) + " - " + Str(MyList()\val_2) + " - " + Str(MyList()\val_3)
Next