29 Stimmen

Vergleich von zwei Arrays

Ich habe zwei NSArrays, was ich suche zu tun ist, um zwei Arrays zu vergleichen, die Zeichenfolgen enthalten, finden die Ähnlichkeiten und erstellen Sie das erste Array wieder, aber so haben Sie keine Ähnlichkeiten.

Nur als Beispiel etwas wie.

Zwei Arrays:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];

Das Ergebnis:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];

NSArray *arrayOneCopy = [NSArray arrayWithObjects:@"TD1", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];

62voto

newacct Punkte 114757
NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:arrayOne];
[arrayOneCopy removeObjectsInArray:arrayTwo];

28voto

bbum Punkte 161596

Verwenden Sie NSMutableSet :

NSMutableSet *setOne = [NSMutableSet setWithArray: arrayOne];
NSMutableSet *setTwo = [NSMutableSet setWithArray: arrayTwo];

[setOne minusSet: setTwo];

NSArray *arrayOneResult = [setOne allObjects];

(Genau genommen, setTwo muss nicht veränderbar sein, kann auch ein NSSet (was besser funktioniert))

Oder verwenden Sie NSArray, wie die andere Person geantwortet hat - das funktioniert auch.

Welche davon funktioniert, hängt ganz von der Größe Ihres Datensatzes ab. Für kleine Datensätze ist die Array-Lösung gut geeignet. Für größere Datensätze ist NSSet viel effizienter, da die Zugehörigkeitstests eine Hash-Prüfung und keine lineare Suche sind.

Messen Sie und verwenden Sie diejenige, die am besten funktioniert.

3voto

Peter Lapisu Punkte 19050
- (NSInteger)countOfDifferentObjects:(NSArray *)anotherArray {

    NSSet * s = [NSSet setWithArray:self];
    NSMutableSet * s1 = [NSMutableSet setWithSet:s];
    NSSet * s2 = [NSSet setWithArray:anotherArray];

    [s1 unionSet:s2];
    [s1 minusSet:s];
    return [s1 count];
}

Dies gibt die Anzahl der unterschiedlichen Objekte zwischen zwei Arrays zurück (Vergleich mit isEqual)

array1 = @"A", @"B", @"C"
array2 = @"B", @"D", @"Z"
returns 2 (D and Z are different)

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