Gesamtes Array vergleichen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Gesamtes Array vergleichen

    Hallo,

    suche nach einer Möglichkeit Array's zu vergleichen, nicht einzelne Werte sonder das ganze...

    Beispiel:

    Array1 = 1, 2, 3, 4
    Array2 = 1, 2, 3, 4

    VB.NET-Quellcode

    1. if Array1 = Array2 Then
    2. ' mache das
    3. else
    4. ' mache dieses
    5. End if


    Funktioniert ja so nicht...

    Ich komm nur nicht drauf, wie ich sonst machen könnt ...

    EDIT:

    Aber so könnts gehen...

    oder einfach nur pervers ?

    VB.NET-Quellcode

    1. Dim Z As Integer
    2. Dim Y As Integer
    3. If IDs(Z) = IDvergleich(Y) Then
    4. ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    VB.NET-Quellcode

    1. Function vergleichen(ByVal array01() As Integer, ByVal array02() As Integer) As Boolean
    2. Dim count As Integer
    3. If Not array01.Count = array02.Count Then
    4. Return False
    5. Exit Function
    6. End If
    7. For i As Integer = 0 To count + 1
    8. If array01(i) = array02(i) = False Then
    9. Return False
    10. Exit Function
    11. End If
    12. Next
    13. Return True
    14. End Function

    Gerade geschrieben und getestet.
    Das lässt sich auch ausweiten auf jeden Typ. Aber das reicht für Integer:

    VB.NET-Quellcode

    1. Public Function CheckArray(arr1 As Integer(), arr2 As Integer()) As Boolean
    2. Dim b As Boolean = False
    3. If arr1.Length() = arr2.Length() Then
    4. b = True
    5. For c As Integer = 0 to arr1.Length() - 1
    6. b = b And arr1(c).Equals(arr2(c))
    7. Next
    8. End If
    9. Return b
    10. End Function


    @Theo :
    getestet wohl nicht
    eine nicht funktionierede Schleife, da count keinen Wert kriegt und du count + 1 nimmst und nicht count - 1 ;)
    EDIT: Dieses Verfahren funktioniert nur mit angepassten Typen, in denen der =-Operatior definiert ist. Danach könnte allerdings auch gleich "If A=B" geschrieben werden, sodass dieser Post überflüssig ist. Ich lasse ihn mal stehen, um den Zusammenhang zu wahren.

    Es gibt wieder mal einen Einzeilenvergleich. Gegeben sind zwei Arrays A1 und A2.

    VB.NET-Quellcode

    1. If (A1.Union(A2) = A1 And A1.Union(A2) = A2 And A1.Length() > 0 And A2.Length) > 0 Or (A1.Length = 0 And A2.Length = 0) Then
    2. 'gleich
    3. Else
    4. 'ungleich
    5. End If


    Wenn beide Mengen leer sind, sind sie gleich. Sind beide Mengen nichtleer und die Vereinigung beider ist sowohl gleich der ersten als auch der zweiten, sind die Mengen gleich.
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()

    @hal2000: Es wurde oben doch gepostet, dass man Arrays ja nicht so vergleichen kann :

    VB.NET-Quellcode

    1. If arr1 = arr2 Then

    In deiner Kurzfassung benutzt du dies, was ja bedeuten muss, es geht.
    Auch wenn es der Compiler zulässt und meistens so macht, wie man glaubt macht, würde ich Euch doch empfehlen, bei derartigen If-Konstruktionen Klammern zu setzen, damit man die Abfragelogik auf einen Blick erkennen kann.

    VB.NET-Quellcode

    1. ' so nicht !
    2. If a = b = False Then
    3. '...
    4. Else
    5. '...
    6. End If

    VB.NET-Quellcode

    1. ' Besser so
    2. If (a = b) = False Then
    3. '...
    4. Else
    5. '...
    6. End If

    VB.NET-Quellcode

    1. ' Noch besser so
    2. If Not (a = b) Then
    3. '...
    4. Else
    5. '...
    6. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi

    VB.NET-Quellcode

    1. Public Function ArrayEquals(ByVal array1() As Object, ByVal array2() As Object) As Boolean
    2. If array1.LongLength = array.LongLength Then
    3. For l As Long = 0 To array1.LongLength -1
    4. If Not array1(i).Equals(array2(i)) Then
    5. Return False
    6. End If
    7. Next
    8. Return True
    9. Else
    10. Return False
    11. End If
    12. End Function


    Das ganze geht mit Length und Integer statt LongLength und Long normalerweise auch, doch wenn die Arrays einmal mehr als 2^32 -1 Werte haben, wird von mir meine Methode empfohlen. Da Equals eine von jedem Objekt überschreibbare Vergleichsoperation darstellt, ist es sinnvoll auf sie zurückzugreifen.

    Gruß
    ~blaze~