Aktuelle Zeit: 19.05.2019 22:33

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 00:41 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
In einem aktuellen Projekt arbeite ich viel mit Listen. Wenn ich nun die List mit ForEach durchlaufe und zur Auswertung auch Informationen des vorhergehenden oder nachfolgenden Listelementes brauche, ist das sehr umständlich. Aus diesem Grund habe ich mir in meine List eine zusätzliche Verknüpfung auf das vorhergehenden und nachfolgende Listelement eingebaut. Damit ist etwas in einer Zeile möglich, was sonst mehrere Zeilen benötigen würde. Z.B.

Code:
If MyList()\xyz = #True And MyList()\Prev\xyz = #True And MyList()\Prev\Prev\xyz = #True
EndIf


Das mit den eigenen Listfeldern \Next und \Prev hat natürlich auch den Nachteil, dass diese erstellt und korrigiert werden müssen, wenn sich in der List was ändert.

Ich hab nun ein wenig herumgespielt und bin auf folgenden Code gekommen, der die Pb-eigenen Links verwendet. Damit entfällt die Gefahr bei der Wartung der eigenen Links und es wird auch kein zusätzlicher Speicher in der List benötigt.
Code:
CompilerIf 0

  Structure MYSTRUC
    *NextItem.MYSTRUC[0]
    *PrevItem.MYSTRUC[0]
    Text1$
    Text2$
    x.i
    y.i
    z.i
  EndStructure

CompilerElse

  Macro _MYSTRUC
    Text1$
    Text2$
    x.i
    y.i
    z.i
  EndMacro

  Structure MYSTRUC
    *NextPrevItem.MYSTRUC_EX[0]
    _MYSTRUC
  EndStructure

  Structure MYSTRUC_EX
    *NextItem
    *PrevItem
    *NextPrevItem.MYSTRUC_EX[0]
    _MYSTRUC
  EndStructure

  Macro NextItem : NextPrevItem[-2] : EndMacro
  Macro PrevItem : NextPrevItem[-1] : EndMacro

CompilerEndIf



Debug ""
Debug "==== CREATE LIST ====="
Debug ""

NewList MyList.MYSTRUC()

AddElement (MyList()) : MyList()\Text1$ = "Element1" : MyList()\x = 111
AddElement (MyList()) : MyList()\Text1$ = "Element2" : MyList()\x = 222
AddElement (MyList()) : MyList()\Text1$ = "Element3" : MyList()\x = 333


Debug ""
Debug "==== EXAMPLE 1 ====="
Debug ""

FirstElement (MyList())
NextElement  (MyList())

Debug "" + MyList()\x + " - " + MyList()\PrevItem\Text1$ + " - " + MyList()\PrevItem\x
Debug "" + MyList()\x + " - " + MyList()         \Text1$ + " - " + MyList()         \x
Debug "" + MyList()\x + " - " + MyList()\NextItem\Text1$ + " - " + MyList()\NextItem\x

Debug ""
Debug "==== EXAMPLE 2 ====="
Debug ""

FirstElement (MyList())

Debug MyList()                  \Text1$
Debug MyList()\NextItem\PrevItem\Text1$
Debug MyList()\NextItem         \Text1$
Debug MyList()\NextItem\NextItem\Text1$


Vielleicht kann es mal wer brauchen oder vielleicht hat einer auch noch eine bessere Idee um dies schöner umzusetzen.


Zuletzt geändert von Josh am 14.05.2019 14:22, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 09:47 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Hab das Beispiel im ersten Beitrag noch mal ein bisschen aufgepeppt. Nachteil ist noch immer, die Codeverdoppelung die für die Struktur notwendig ist. Vielleicht hat da wer eine Idee, um dies zu vermeiden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 12:02 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Josh hat geschrieben:
Hab das Beispiel im ersten Beitrag noch mal ein bisschen aufgepeppt. Nachteil ist noch immer, die Codeverdoppelung die für die Struktur notwendig ist. Vielleicht hat da wer eine Idee, um dies zu vermeiden.

Das ist einfach. Nutz das Schlüsselwort Extends.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 12:53 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
NicTheQuick hat geschrieben:
Das ist einfach. Nutz das Schlüsselwort Extends.

Nütz leider nichts. Bei Extends werden die Strukturelemente der Extend-Struktur vorangestellt. Ich brauche die unbedingt hinten angefügt. :cry:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 13:15 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Dann vielleicht ein eigenes Schlüsselwort à la "EndStructureList", das im Grunde nur ein Macro ohne Parameter ist und ein paar Elemente am Ende hinzufügt bevor tatsächlich "EndStructure" geschrieben wird.

Ich habe mir deinen Code aber auch noch gar nicht so genau angeschaut. Es kommt mir komisch vor, dass das hinten angehängt werden muss. Ich schaue mal, wenn ich mehr Zeit habe. Vorausgesetzt es gibt mir sonst niemand zuvor. :-D

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 13:42 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
NicTheQuick hat geschrieben:
Es kommt mir komisch vor, dass das hinten angehängt werden muss.

Ist aber leider so. Die Pb interne Struktur eines Listelementes schaut wie folgt aus:

  • Verweis auf das nächsten Listelement (normal für Benutzer nicht zugänglich)
  • Verweis auf das vorhergehende Listelement (nomal für Benutzer nicht zugänglich)
  • Dann folgt je nach Listdefinition ein Integer, die Benutzerstruktur oder sonst was


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 13:46 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Achso, ja. Genau so soll es doch sein. So macht man das mit LinkedLists normalerweise auch. Zuerst die Elementstruktur und danach die Benutzerdaten.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 13:47 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Wenn man @ListElement() macht, bekommt man die Adresse zur Struktur des Elements, der Header liegt dabei davor, mit Pointern zu NextElement, PrevElement und ListHeader.
Die Pointer für Vorgänger und Nachfolger leiten jedoch dann auf den Header des Elements, dort ist dann die Element-Struktur weiter hinten.

Weiterführende Themen:
Struktur von PBs LinkedLists. Richtig so?
Array in Structure, negative Felder so dauerhaft möglich

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lists - Verknüpfungen
BeitragVerfasst: 14.05.2019 14:38 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
NicTheQuick hat geschrieben:
So macht man das mit LinkedLists normalerweise auch.
Es geht ja um LinkedLists :D

@Stargate
Danke für die Links


Habe meinen Code im ersten Beitrag noch mal ein wenig angepasst. Bin eigentlich ganz zufrieden, nur ohne die Codeverdoppelung für die Struktur wäre es halt noch besser. Wichtig für mich war natürlich auch, dass Autovervollständigen funktioniert, da kann ich mit der Codeverdoppelung auch leben.

Wie oben beschrieben, habe ich bis jetzt ja mit selber erstellten Feldern \Next und \Prev gearbeitet. Habe mal angefangen diese durch \NextItem und \PrevItem zu ersetzen. Puhhhh, hätte ich gar nicht gedacht, dass ich diese StrukturFelder meiner List im aktuellen Projekt über 800 mal verwende.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye