Je poste ci-dessous ce qu'il y a dans le titre. Cela peut servir également aux tableaux mais aussi à fusionner 1 liste et 1 tableau ou à trouver l'intersection vers 1 autre liste.
FUSION :
Code : Tout sélectionner
; fusion de 2 listes triées vers une liste
#FinListe = "ZZZZ"
NewList ListeOne.s()
NewList ListeTwo.s()
NewList ListeRes.s()
Procedure Fusion(ListeOne.s(), ListeTwo.s())
Shared ListeRes()
Repeat
; If ListIndex(ListeOne())=CountList(ListeOne())-1 And ListIndex(ListeTwo())=CountList(ListeTwo())-1
If ListeOne()=#FinListe And ListeTwo()=#FinListe
DeleteElement(ListeRes()) ; supprimer l'élément vide
Break
ElseIf ListeOne()<ListeTwo()
ListeRes()=ListeOne(): NextElement(ListeOne())
ElseIf ListeTwo()<ListeOne()
ListeRes()=ListeTwo(): NextElement(ListeTwo())
Else
ListeRes()=ListeOne()
NextElement(ListeOne()): NextElement(ListeTwo())
EndIf
AddElement(ListeRes())
ForEver
EndProcedure
; remplissage des 2 listes à fusionner
For i=0 To 3
AddElement(ListeOne())
If i<3
ListeOne() = Chr((2*i)+65)
Else
ListeOne()=#FinListe ; marque de fin de liste
EndIf
Next i
For i=0 To 4
AddElement(ListeTwo())
If i<4
ListeTwo() = Chr(81+i)
Else
ListeTwo()=#FinListe ; marque de fin de liste
EndIf
Next i
; affichage de chaque liste
Debug "----Liste 1"
i=0
ForEach ListeOne()
Debug Str(i) + "-" + ListeOne()
i+1
If i=CountList(ListeOne())-1
Break
EndIf
Next
Debug "----Liste 2"
j=0
ForEach ListeTwo()
Debug Str(j) + "-" + ListeTwo()
j+1
If j=CountList(ListeTwo())-1
Break
EndIf
Next
FirstElement(ListeOne())
FirstElement(ListeTwo())
AddElement(ListeRes())
Fusion(ListeOne(), ListeTwo())
; affichage du résultat
Debug "------------Fusion Liste 1 & Liste 2"
i=0
ForEach ListeRes()
Debug Str(i) + "-" + ListeRes()
i+1
Next
Debug "Nombre d'éléments dans liste Res = " + Str(CountList(ListeRes()))
End
Code : Tout sélectionner
; intersection de 2 listes triées vers une liste
#FinListe = "ZZZZ"
NewList ListeOne.s()
NewList ListeTwo.s()
NewList ListeRes.s()
Procedure Intersection(ListeOne.s(), ListeTwo.s())
Shared ListeRes()
Repeat
; If ListIndex(ListeOne())=CountList(ListeOne())-1 And ListIndex(ListeTwo())=CountList(ListeTwo())-1
If ListeOne()=#FinListe And ListeTwo()=#FinListe
DeleteElement(ListeRes()) ; effacer l'élément vide
Break
ElseIf ListeOne()<ListeTwo() ; valeur liste1 < Valeur liste2
NextElement(ListeOne())
ElseIf ListeTwo()<ListeOne() ; valeur liste2 < valeur liste1
NextElement(ListeTwo())
Else ; valeur liste1 = valeur liste2
ListeRes()=ListeOne()
NextElement(ListeOne()): NextElement(ListeTwo())
AddElement(ListeRes())
EndIf
ForEver
EndProcedure
For i=0 To 14
AddElement(ListeOne())
If i<14
ListeOne() = Chr(i+65)
Else
ListeOne()=#FinListe ; marque de fin de liste
EndIf
Next i
For i=0 To 7
AddElement(ListeTwo())
If i<7
ListeTwo() = Chr(75+i)
Else
ListeTwo()=#FinListe ; marque de fin de liste
EndIf
Next i
Debug "----Liste One"
i=0
ForEach ListeOne()
Debug Str(i) + "-" + ListeOne()
i+1
If i=CountList(ListeOne())-1
Break
EndIf
Next
Debug "----Liste Two"
j=0
ForEach ListeTwo()
Debug Str(j) + "-" + ListeTwo()
j+1
If j=CountList(ListeTwo())-1
Break
EndIf
Next
FirstElement(ListeOne())
FirstElement(ListeTwo())
AddElement(ListeRes())
Intersection(ListeOne(), ListeTwo())
Debug "---------- Intersection Liste One & Liste Two"
i=0
ForEach ListeRes()
Debug Str(i) + "-" + ListeRes()
i+1
Next
Debug "Nombre d'éléments dans Liste Res = " + Str(CountList(ListeRes()))
End
A+