Bonjour,
Après un break, mon projet de la rubrique jeu est bientôt fini et l'IA est bien au rendez vous.
Une petite question cependant qui pourrait me faire optimiser mon code.
Peux-ton manipuler une liste au sein d'une procédure prenant une liste comme argument ?
Ex : procedure ma_fonction(*maliste.liste)
for each *maliste
...
next
selectelement(*maliste,5)
...
endprocedure
J'imagine que ça n'est pas possible ? L'argument étant l'élément courant de la liste et non la liste elle-même...
Mais dans le doute je vous pose la question.
Merci.
Liste comme argument d'une procedure
-
- Messages : 121
- Inscription : mer. 21/janv./2004 22:18
Liste comme argument d'une procedure
Dernière modification par hackotedelaplaque le mer. 23/mai/2007 21:22, modifié 2 fois.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Depuis la V4, c'est possible :
Code : Tout sélectionner
; Listes chaînées et tableaux en paramètres
;
; Liste chaînée
;
;
NewList Test.Point()
AddElement(Test())
Test()\x = 1
AddElement(Test())
Test()\x = 2
Procedure DebugList(c.l, ParametreListe.Point())
AddElement(ParametreListe())
ParametreListe()\x = 3
ForEach ParametreListe()
MessageRequester("Liste", Str(ParametreListe()\x))
Next
EndProcedure
DebugList(10, Test())
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 121
- Inscription : mer. 21/janv./2004 22:18
-
- Messages : 121
- Inscription : mer. 21/janv./2004 22:18
J'ai marqué le topic en résolu un peu trop rapidement.
En effet on peut passer depuis la v4 une liste en argument.
Mais il y a une grande différence qui dans mon cas pose problème.
Avant la v4 j'utilisais la technique des pointeurs pour passer ma liste.
La différence ?
Si dans ma procédure j'ai la commande deleteelement(ma_liste()), l'élément courant de la liste devient automatiquement l'élément suivant !
Ce qui n'est pas le cas en passant un pointeur en argument.
En effet on peut passer depuis la v4 une liste en argument.
Mais il y a une grande différence qui dans mon cas pose problème.
Avant la v4 j'utilisais la technique des pointeurs pour passer ma liste.
La différence ?
Si dans ma procédure j'ai la commande deleteelement(ma_liste()), l'élément courant de la liste devient automatiquement l'élément suivant !
Ce qui n'est pas le cas en passant un pointeur en argument.
Il te suffit d'ajouter NextElement !!
Code : Tout sélectionner
NewList Test.POINT()
AddElement(Test())
Test()\x = 10
AddElement(Test())
Test()\x = 20
Procedure DebugList(c.l, ParametreListe.POINT())
AddElement(ParametreListe())
ParametreListe()\x = 35
ForEach ParametreListe()
MessageRequester("Liste", Str(ParametreListe()\x))
Next
EndProcedure
Procedure DelElList(ParametreListe.POINT())
FirstElement(ParametreListe())
MessageRequester("Liste", Str(ParametreListe()\x))
DeleteElement(ParametreListe())
NextElement(ParametreListe())
MessageRequester("Liste", Str(ParametreListe()\x))
EndProcedure
DebugList(10, Test())
DelElList(Test())
Denis
Bonne Jounée à tous
Bonne Jounée à tous
-
- Messages : 121
- Inscription : mer. 21/janv./2004 22:18
Nextelement non car je n'ai plus à travailler sur la liste après mon deleteelement().
Je dois juste sortir purement et simplement de la fonction. Ce n'est pas un gros travail.
Juste une dernière question sur le sujet : y'a t il des inconvénients à passer un pointeur en argument plutot que la liste en termes de performance ?
Je dois juste sortir purement et simplement de la fonction. Ce n'est pas un gros travail.
Juste une dernière question sur le sujet : y'a t il des inconvénients à passer un pointeur en argument plutot que la liste en termes de performance ?