Last active
December 25, 2015 15:29
-
-
Save pedromancheno/6998204 to your computer and use it in GitHub Desktop.
Categories for NSDictionary and NSArray for swapping the keys of a dictionary for it's value.
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
@interface NSDictionary (Swapping) | |
- (NSDictionary *)dictionaryBySwappingKeyWithValue; | |
@end | |
@interface NSDictionary (Swapping) | |
- (NSDictionary *)dictionaryBySwappingKeyWithValue | |
{ | |
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithCapacity:self.count]; | |
[self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { | |
id newKey = nil; | |
if ([value isKindOfClass:[NSDictionary class]]) { | |
newKey = [value dictionaryBySwappingKeyWithValue]; | |
} else if ([value isKindOfClass:[NSArray class]]) { | |
newKey = [value arrayBySwappingKeyWithValue]; | |
} else { | |
newKey = value; | |
} | |
if (![newKey conformsToProtocol:@protocol(NSCopying)]) { | |
newKey = [NSValue valueWithNonretainedObject:newKey]; | |
} | |
mutableDictionary[newKey] = key; | |
}]; | |
return [NSDictionary dictionaryWithDictionary:mutableDictionary]; | |
} | |
@end | |
@interface NSArray (Swapping) | |
- (NSArray *)arrayBySwappingKeyWithValue; | |
@end | |
@implementation NSArray (Swapping) | |
- (NSArray *)arrayBySwappingKeyWithValue | |
{ | |
NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:self.count]; | |
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { | |
if ([obj isKindOfClass:[NSDictionary class]]) { | |
NSDictionary *newDict = [obj dictionaryBySwappingKeyWithValue]; | |
mutableArray[idx] = newDict; | |
} else if ([obj isKindOfClass:[NSArray class]]) { | |
NSArray *newArray = [obj arrayBySwappingKeyWithValue]; | |
mutableArray[idx] = newArray; | |
} else { | |
mutableArray[idx] = obj; | |
} | |
}]; | |
return [NSArray arrayWithArray:mutableArray]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment