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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message par Shadow »

Je déconseille ce genre de chose !
Utilise une Map, c'est ultra rapide !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

Message par omega »

Merci à tous, je vais essayer une map (pour la 1ère fois)
Win7 (x64) 64 bits Pb 5.72
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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 !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Shadow, tu as bien résumé.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

Message 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
Win7 (x64) 64 bits Pb 5.72
Répondre