7 Stimmen

Vergleichen Sie zwei Arrays mit dem gleichen Wert, aber mit einer unterschiedlichen Reihenfolge

Ich habe 2 NSArrays, mit den gleichen Werten, aber in anderer Reihenfolge.

NSArray * array1 = {0,1,2,3}
NSArray * array2 = {2,3,1,0}

Ich brauche eine Methode, um zu bestimmen, ob zwei Arrays die gleichen Werte in anderer Reihenfolge haben.

Art von

-(BOOL) isSameValues:(NSArray*)array1 und:(NSArray*)array2;

20voto

Martin R Punkte 510450

Sie können NSCountedSet für diesen Zweck verwenden:

- (BOOL)isSameValues:(NSArray*)array1 and:(NSArray*)array2
{
    NSCountedSet *set1 = [NSCountedSet setWithArray:array1];
    NSCountedSet *set2 = [NSCountedSet setWithArray:array2];
    return [set1 isEqualToSet:set2];
}

NSCountedSet ist eine Sammlung verschiedener Objekte, bei der jedem Objekt ein Zähler zugeordnet ist. Daher ist das Ergebnis für

NSArray *array1 = @[@0,@1,@2,@3];
NSArray *array2 = @[@2,@3,@1,@0];

ist YES, aber für

NSArray *array1 = @[@1,@1,@3,@3];
NSArray *array2 = @[@3,@3,@3,@1];

ist das Ergebnis NO.

5voto

Dmitry Shevchenko Punkte 30176

Aktualisierung: Dies funktioniert nicht, wenn Arrays doppelte Elemente enthalten!

Sie könnten zwei NSSets mit diesen Arrays erstellen und sie vergleichen.

NSArray * array1 = @[@0,@1,@2,@3];
NSArray * array2 = @[@2,@3,@1,@0];

NSSet *set1 = [NSSet setWithArray:array1];
NSSet *set2 = [NSSet setWithArray:array2];

NSLog(@"Ergebnis %@", [set1 isEqualToSet:set2] ? @"JA" : @"NEIN");

4voto

DrummerB Punkte 39424
if ([[NSSet setWithArray:array1] isEqualToSet:[NSSet setWithArray:array2]]) {
    // die Objekte sind gleich
}

0voto

Nehmen Sie die Gesamtzahl der Elemente. Haben Sie einen Zähler. Und stellen Sie eine doppelte 'for-Schleife' ein, um jedes Element des anderen Elements zu durchlaufen. Erhöhen Sie den Zähler bei jedem Treffer. Hinweis: Dies ist gültig, wenn alle Elemente eindeutig sind.

Wenn unterschiedlich oder Sie es nicht wissen, sortieren Sie sie und gleichen Sie sie eins zu eins ab.

0voto

DrummerB Punkte 39424

Ein anderer Weg wäre die Verwendung eines NSHashTable.

- (BOOL)array:(NSArray *)array1 enthältDieGleichenObjekteWieArray:(NSArray *)array2 {
    if (array1.count != array2.count) {
        return NO;
    }
    NSHashTable *table = [[NSHashTable alloc] initWithOptions:NSHashTableWeakMemory 
                                                     capacity:array1.count];
    for (NSObject *object in array1) {
        [table addObject:object];
    }
    for (NSObject *object in array2) {
        if (![table containsObject:object]) {
            return NO;
        }
    }
   return YES;
}

Beachten Sie, dass NSHashTable iOS 6+ erfordert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X