Damit kann ich per Pointer auf das erste Element einer Liste zugreifen. Wenn ich nun perointer auf den Inhalt des zweiten Listenelements zugreifen möchte, wie geht das?
AddElement gibt den Pointer zurück. Strings erfordern eine kleine Sonderbehandlung.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
NewList File1.s()
For i = 1 To 4
AddElement(File1())
File1() = "Zeile_"+Str(i)
Next i
FirstElement(File1())
Define Datei1.String
Define *pDatei1.String
*pDatei1 = @Datei1
*pDatei1\s = File1()
For i = 1 To 4
Debug *pDatei1\s
;?????????
Next
Die Frage ist: Wie muss ich in der Schleife den Pointer ändern, damit ich die einzelnen Listenelemente anzeigen kann.
Ich verstehe den Sinn Deines vorgehens nicht. Es wird kein Pointer gebraucht. Dieser wird nur gebraucht,
wenn man das aktuelle Element ändert und später wieder an dieselbe Postion möchte, dafür gibts aber
inzwischen auch Pop/PushListPos.
Die normale Iteration sieht so aus:
NewList File1.s()
For i = 1 To 4
AddElement(File1())
File1() = "Zeile_"+Str(i)
Next i
ForEach File1()
Debug File1()
Next
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
NewList File1.s()
For i = 1 To 4
AddElement(File1())
File1() = "Zeile_"+Str(i)
Next i
FirstElement(File1())
Define Datei1.String
Define *pDatei1.String
*pDatei1 = @Datei1
*pDatei1\s = File1()
For i = 1 To 4
Debug *pDatei1\s
;?????????
Next
Ich würde gerne in einer Schleife das Listenelement 1 mit dem Listenelement 2 vergleichen. Ich denke, dass der Vergleich über Pointer etwas schneller geht wie mit Variabeln zu arbeiteb
Eine Liste verwendet man, wenn man eine dynamische Anzahl elemente hat. Du hantierst immer mit 1 - 4?
Wenn die Anzahl feststeht, wäre ein Array sinnvoller und würde das mit dem Pointer vielleicht mehr Sinn
machen. So sehe ich weder den Sinn noch den Vorteil.
Für mich sieht es so aus, als wenn Du alles nur verkomplizierst ohne jegliche Vorteile.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
NewList File1.s()
For i = 1 To 4
AddElement(File1())
File1() = "Zeile_" + Str(i)
Next i
Define *File.String
ForEach File1()
*File = @File1()
PushListPosition(File1())
While NextElement(File1())
Debug "Vergleiche " + *File\s + " mit " + File1()
Wend
PopListPosition(File1())
Next
NewList File1.s()
For i = 1 To 4
AddElement(File1())
File1() = "Zeile_" + Str(i)
Next i
Define File.s
ForEach File1()
File = File1()
PushListPosition(File1())
While NextElement(File1())
Debug "Vergleiche " + File + " mit " + File1()
Wend
PopListPosition(File1())
Next
Sollte auch nicht langsamer sein.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Klar, so ist's eigentlich auch für den Laien verständlicher. Ich hab mich von seiner Pointerei hinreißen lassen. Aber theoretisch ist die Pointerlösung natürlich schneller, weil dann keinerlei Strings kopiert werden müssen. Wenn die Strings jetzt ewig lang wären, dann würde sich das bemerkbar machen, wobei die quadratische Laufzeit durch die Schachtelung ja trotzdem überwiegt.
Das Schnellste ist normalerweise die Liste oder das Array zu sortieren und dann durch iterieren und schauen, ob zwei gleiche Strings aufeinander folgen.