[R] Comparer 2 tableaux

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Gyn69
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 19 janv. 2008 20:56
Status : Hors ligne

[R] Comparer 2 tableaux

#1

Message par Gyn69 »

bonjour a tous
voila je rencontre une difficulté a faire une comparaison de 2 tableaux voila mon script simplifier

Code : Tout sélectionner

dim $var[2][1] = [[4],[5]]
dim $var2[2][1] = [[4],[4]]
dim $var3[2][1] = [[4],[5]]

Select
    Case $var == $var2
        MsgBox(0, "", "identique")
    case $var == $var3
        MsgBox(0,"","2° ok")
    Case Else
        MsgBox(0, "", "pas bon")
EndSelect
il me répond que le 1 case est valide soit ("identique") alors que le contenu de $var2 n'est pas identique a $var. C'est la deuxième solution qui est bonne .... que faire
merci d'avance pour votre aide
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: comparer 2 tableaux

#2

Message par sylvanie »

bonsoir,

je ne pense pas que = ou == soit adaptés a des variable de type array. Il faut construire une fonction équivalente testant les membres des tableaux. En voici un exemple pour des tableau nXm

Code : Tout sélectionner

Dim $tab1[2][2]=[[1,0],[0,1]]
Dim $tab2[2][2]=[[1,0],[0,1]]

ConsoleWrite(EQ_array_2D($tab1,$tab2))
Exit 0

Func EQ_array_2D($array1,$array2)
    Local $ind1,$ind2,$dim1,$dim2
    
    ;verifie si on a bien des tableau en argument
    If Not IsArray($array1) Or Not IsArray($array2) Then
        SetError(1)
        Return 0
    EndIf
    
    ;verifie si les dimensions sont égales
    if UBound($array1)<>UBound($array2) Or UBound($array1,2)<>UBound($array2,2) Then
        SetError(1)
        Return 0
    EndIf
    
    ; ok on test membre par membre
    SetError(0)
    $dim1=UBound($array1) - 1
    $dim2=UBound($array2) - 1
    For $ind1=0 To $dim1
        For $ind2=0 to $dim2
            If $array1[$ind1][$ind2]<>$array2[$ind1][$ind2] Then Return 0
        Next
    Next
    Return 1
EndFunc 
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre