Page 1 sur 1

Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 11:46
par omega
Bonjour à tous

Je voudrais mettre à jour une liste chaînée de la manière suivante:
Si un élément n'existe pas, je le crée

Code : Tout sélectionner

Si codeprod$ n'existe pas dans la liste, je le crée:
    AddElement(MargeList())
    MargeList()\codeprod=Val(codeprod$)


Merci

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 12:58
par Micoute
Je pense que je regarderais dans la liste, à la position où devrait se trouver l'élément, si sa valeur existe.

Code : Tout sélectionner

SelectElement(MaListe()\MonElement, 2)
If MaListe()\MonElement = MaValeurAttendue
  Faire_ceci
Else
  Faire_Cela
Endif
ou quelque chose comme ça.

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 15:06
par Marc56
Il faut parcourir toute la liste pour voir s'il existe et si non, alors on l'ajoute:

Code : Tout sélectionner

    ForEach MargeList()
        With MargeList()
            If \codeprod = Val(codeprod$)
                Element_Exist = 1
                Break
            EndIf
        EndWith
    Next
    
    If Element_Exist = 0
        AddElement(...
    EndIf
Note le break qui permet de sortir tout de suite si l'élément est trouvé sans avoir à continuer la liste.

PS. Si le codeprod est unique, alors une map pourrait être plus intéressante en utilisant ce code comme clé.
Tu peux ainsi savoir si le code existe sans parcourir tous les éléments.

:wink:

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 15:11
par Shadow
Je déconseille ce genre de chose !
Utilise une Map, c'est ultra rapide !

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 23:43
par omega
Merci à tous, je vais essayer une map (pour la 1ère fois)

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : sam. 08/août/2020 23:48
par Shadow
omega a écrit :Merci à tous, je vais essayer une map (pour la 1ère fois)
Il faut une première à toute chose !
Mais ça va drastiquement te simplifier la vie !
Car l'accès est instantané grâce à une clef, vois ça comme une adresse si tu veux en gros !

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : dim. 09/août/2020 15:11
par Micoute
Shadow, tu as bien résumé.

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : dim. 09/août/2020 16:14
par omega
Bonjour à tous

En essayant d'utiliser une Map, je n'arrive pas à faire ce que je veux. J'ai vu l'aide avec un exemple mais sans succès. Regardez ce code et dites moi pourquoi une erreur est signalée. Voici un aperçu sur ce que je veux:

La map doit être structurée de la la façon suivante:
Doc.s
Remise.s

La clé de recherche (unique) est Doc.

Code : Tout sélectionner

Structure BasicStructure 
  doc.s
  remise.s
EndStructure

NewMap TestMap.BasicStructure()
  
;Quelques datas pour tester (erreur signalée à cet endroit)
TestMap("BR1000")\Doc= 1
TestMap("BR1200")\Doc= 2
TestMap("BR1300")\Doc = 3
TestMap("BR1400")\Doc = 4
;
Debug "Number of elements in the Map: " + MapSize(TestMap())

ForEach TestMap() 
  Debug TestMap()\Doc
Next

; Accès direct
If FindMapElement(TestMap(), "BR1300")
   Debug TestMap()\doc
Else
   Debug "BR1300 non trouvé"
EndIf
Merci de votre aide

Re: Ajouter élément s'il n'existe pas dans une liste

Publié : dim. 09/août/2020 16:36
par omega
ça y est, j'ai compris, et ça marche si simple pourtant...

Code : Tout sélectionner

 
NewMap TestMap.s()
  
TestMap("BR10") = "25540"
TestMap("BR15") = "32750"
TestMap("BR34") = "4545100"
TestMap("BR55") = "226014"
  
If FindMapElement(TestMap(), "BR15")
   Debug TestMap()
Else
   Debug "BR15 non trouvé"
EndIf
Merci à tous