Page 1 sur 1
Fusionner 2 tableaux
Posté : lun. 19 avr. 2021 15:19
par antore
Bonjour
Je cherche à fusionner 2 tableaux en 1 seul avec en point de comparaison la même valeur
Local $nombre[5][2] = [["Valeur 1", "11"], ["Valeur 2", "22"], ["Valeur 3", "33"], ["Valeur 4", "44"], ["Valeur 5", "55"]]
Local $lettre[5][2] = [["Valeur 1", "aa"], ["Valeur 2", "bb"], ["Valeur 3", "cc"], ["Valeur 4", "dd"], ["Valeur 5", "ee"]]
j'aimerai avoir ce résultat
valeur 1 11 aa
valeur 2 22 bb
valeur 3 33 cc
valeur 4 44 dd
valeur 5 55 ee
je vous remercie
Re: Fusionner 2 tableaux
Posté : lun. 19 avr. 2021 18:00
par TommyDDR
Voilà une fonction qui fusionnera 2 tableaux en gérant à peu près tous les cas
- "Valeur X" présent dans $nombre mais pas dans $lettre
- "Valeur X" présent dans $lettre mais pas dans $nombre
- Plusieurs "Valeur X" identiques présents dans $lettre
- Plusieurs "Valeur X" identiques présents dans $nombre
- Nombre de valeurs par tableau pouvant être ajouté : infini

Vous pouvez même rappeler fusion avec le retour du 1er + un nouveau tableau
Voici un exemple où l'on passe par tous ces cas :
#include <Array.au3>Local $nombre = [["Valeur 1", "11"], ["Valeur 2", "22"], ["Valeur 2", "yy"], ["Valeur 3", "33"], ["Valeur 4", "44"], ["Valeur 5", "55"]]Local $lettre = [["Valeur 1", "aa", "zzz"], ["Valeur 2", "bb"], ["Valeur 3", "cc"], ["Valeur 4", "dd"], ["Valeur 4", "dddd"], ["Valeur 6", "ee"]]Local $special = [["Valeur 1", "$$"], ["Valeur 2", "%%"], ["Valeur 3", ".."], ["Valeur 4", "**"], ["Valeur 5", ";;;"], ["Valeur 7", "//"]]Local $fusion = fusion
($nombre, $lettre)$fusion = fusion
($fusion, $special)_ArrayDisplay($fusion)Func fusion
($tab1, $tab2) If(UBound($tab1, 0) <> 2 Or UBound($tab2, 0) <> 2) Then Return SetError(1) Local $fusion[0][1] Local $keys[0] Local $tabs = [$tab1, $tab2] For $tabId = 0 To UBound($tabs, 1) - 1 Local $tab = $tabs[$tabId] For $i = 0 To UBound($tab, 1) - 1 _ArrayAdd($keys, $tab[$i][0]) Next Next $keys = _ArrayUnique($keys, 0, 0, 0, 0) ReDim $fusion[UBound($keys, 1)][UBound($fusion, 2)] For $i = 0 To UBound($keys, 1) - 1 Local $count = 0 $fusion[$i][$count] = $keys[$i] $count += 1 For $tabId = 0 To UBound($tabs, 1) - 1 Local $tab = $tabs[$tabId] Local $idxTab = _ArrayFindAll($tab, $keys[$i]) For $j = 0 To UBound($idxTab, 1) - 1 For $k = 1 To UBound($tab, 2) - 1 Local $val = $tab[$idxTab[$j]][$k] If($val <> "") Then If($count >= UBound($fusion, 2)) Then ReDim $fusion[UBound($fusion, 1)][$count+1] EndIf $fusion[$i][$count] = $val $count += 1 EndIf Next Next Next Next Return $fusionEndFunc