Comparer 2 Arrays

Bonjour,

Question simple mais auquelle je n'ai pas réussi à trouver la réponse :

Existe-t-il un opérateur de comparaison pour deux Arrays le "=" ne marchant pas ? Actuellement j'utilise un traitement du type:

Sub Compare2Arrays()
    a = Array(0, 1, 0)
    b = Array(0, 1, 0)
    ' Ca serait trop simple comme ça, la ligne suivante est en erreur : "Incompatibilité de type"
    Debug.Print a = b
    ' Alors j'ai recours à ça
    Debug.Print (a(0) = b(0)) And (a(1) = b(1)) And (a(2) = b(2))
End Sub

Merci par avance

Bonjour Stéphane1972 ,

Un opérateur non...

Ici existe un petit programme, qui doit être facilement adaptable à votre cas pour comparer les arrays, sûrement plus fiable que votre solution de secours si les arrays sont plus grand que 3x3.

Vous pourriez même en créer une fonction pour ne pas polluer votre code...

À voir donc !

Baboutz

Bonjour Baboutz et merci pour ta réponse

Effectivement le code que tu me fournis est plus général que celui que j'avais donné en exemple. Mais avant de clore ce sujet peux-tu (ou quelqu'un d'autre...) m'assurer qu'il n'existe pas de moyen plus simple d'effectuer cette comparaison ?

Cordialement,

Bonjour,

Pas évident de l'assurer.

Mais, comme ma réponse sur l'autre post, il y a moyen de joindre et de comparer les 2 chaines si vous recherchez une correspondance totale.

Cdlt,

Bonsoir à tous,

Comme ceci :

Join(a, ",") = Join(b, ",")

klin89

Magnifique Klin89

Merci pour le partage !

Comme Baboutz,

Super Klin89.

C'est très efficace et rapide.

Merci beaucoup Klin89 trop efficace ! content de voir que ton Post récolte de nombreux votes !

Je reviens sur ce sujet après avoir effectué un petit banc d'essai chrono. Si la solution de Klin89 est d'un écriture plus belle et plus rationnelle pour de grands Arrays pour les petits Arrays ma solution d'origine s'avère plus rapide:

Sub Chrono()
     a = Array(0, 1, 0)
     b = Array(0, 1, 0)
     ' Comparaison1 (membre à membre)
     st = Timer
     For i = 1 To 5000000
        c = Comparaison1(a, b)
     Next
    Debug.Print "Comparaison 1= " & Timer - st
    ' Comparaison2 (globale)
    st = Timer
    For i = 1 To 5000000
       c = Comparaison2(a, b)
    Next
    Debug.Print "Comparaison 2= " & Timer - st

End Sub

Function Comparaison1(ByVal a, ByVal b) As Boolean
    Comparaison1 = (a(0) = b(0)) And (a(1) = b(1)) And (a(2) = b(2))
End Function

Function Comparaison2(ByVal a, ByVal b) As Boolean
    Comparaison2 = Join(a, ",") = Join(b, ",")
End Function

Chrono me donne le résultat suivant:

Comparaison 1= 4,945313
Comparaison 2= 9,585938

Je n'ai pas essayé sur de plus grands Arrays

Rechercher des sujets similaires à "comparer arrays"