Created
December 16, 2012 17:15
-
-
Save zerodivisi0n/4309728 to your computer and use it in GitHub Desktop.
finding differences of two arrays
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
NSArray *a = [NSArray arrayWithObjects:@"a", @"c", @"d", @"b", @"k", nil]; | |
NSArray *b = [NSArray arrayWithObjects:@"z", @"a", @"d", @"b", @"m", nil]; | |
NSComparator comparator = ^NSComparisonResult(id obj1, id obj2) { | |
return [obj1 caseInsensitiveCompare:obj2]; | |
}; | |
NSArray *sortedA = [a sortedArrayUsingComparator:comparator]; | |
NSArray *sortedB = [b sortedArrayUsingComparator:comparator]; | |
NSLog(@"a=%@, b=%@", sortedA, sortedB); | |
NSMutableArray *added = [NSMutableArray array]; | |
NSMutableArray *updated = [NSMutableArray array]; | |
NSMutableArray *removed = [NSMutableArray array]; | |
NSEnumerator *enumA = [sortedA objectEnumerator]; | |
NSEnumerator *enumB = [sortedB objectEnumerator]; | |
NSString *objA = [enumA nextObject]; | |
NSString *objB = [enumB nextObject]; | |
while (objA && objB) { | |
NSComparisonResult result = comparator(objA, objB); | |
switch (result) { | |
case NSOrderedSame: | |
[updated addObject:objA]; | |
objA = [enumA nextObject]; | |
objB = [enumB nextObject]; | |
break; | |
case NSOrderedAscending: | |
[removed addObject:objA]; | |
objA = [enumA nextObject]; | |
break; | |
case NSOrderedDescending: | |
[added addObject:objB]; | |
objB = [enumB nextObject]; | |
break; | |
default: | |
assert("This should not happen"); | |
break; | |
} | |
} | |
// objA, enumA -> removed | |
while (objA) { | |
[removed addObject:objA]; | |
objA = [enumA nextObject]; | |
} | |
// objB, enumB -> added | |
while (objB) { | |
[added addObject:objB]; | |
objB = [enumB nextObject]; | |
} | |
NSLog(@"added=%@, updated=%@, removed=%@", added, updated, removed); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment