Objective C NSMutableDictionary
Objective C NSMutableDictionary
我有一个关于 NSMutableDictionary 的问题,
假设我有两组 NSMutableDictionary:
NSMutableDictionary *oddNumber
NSMutableDictionary *randomNumber
是否有检查 randomNumber 的值是否是 oddNumber 值的子集的函数?
您可以使用 values
方法获取每个字典的值。这个returns一个数组。然后,您可以将这些数组转换为集合,这些集合具有检查一个集合是否是另一个集合的子集的方法。
你可以这样做,
NSMutableDictionary *oddNumber;
NSMutableDictionary *randomNumber;
// Create arrays
NSArray *arroddNumber = [oddNumber allValues];
NSArray *arrrandomNumber = [oddNumber allValues];
// Turn the arrays into sets and intersect the two sets
NSMutableSet *oddNumberSet = [NSMutableSet setWithArray:arroddNumber];
NSMutableSet *randomNumbersSet = [NSMutableSet setWithArray:arrrandomNumber];
[oddNumberSet intersectSet:randomNumbersSet];
// The Values present in both arrays
NSLog(@"Common Values : %@", oddNumberSet);
看看你的价值观。确保它们有一个 isEqual: 方法和一个 hash 方法,这样你就可以将它们添加到一个集合中。使用第二个字典的所有值创建一个 NSSet,然后遍历第一个字典并检查集合中有哪些值。
请注意,如果值具有合适的哈希函数,则创建具有 N 个值的集合需要 O (N) 时间,并且在集合中查找值是常数时间。
短:
BOOL isSubset = [[oddNumber dictionaryWithValuesForKeys:[randomNumber allKeys]] isEqualToDictionary:randomNumber]
或更快:
__block BOOL isSubset = YES;
[randomNumber enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
id value = [oddNumber objectForKey:key];
if (!value || ![value isEqual:obj]) {
isSubset = NO;
*stop = YES;
}
}];
我有一个关于 NSMutableDictionary 的问题,
假设我有两组 NSMutableDictionary:
NSMutableDictionary *oddNumber
NSMutableDictionary *randomNumber
是否有检查 randomNumber 的值是否是 oddNumber 值的子集的函数?
您可以使用 values
方法获取每个字典的值。这个returns一个数组。然后,您可以将这些数组转换为集合,这些集合具有检查一个集合是否是另一个集合的子集的方法。
你可以这样做,
NSMutableDictionary *oddNumber;
NSMutableDictionary *randomNumber;
// Create arrays
NSArray *arroddNumber = [oddNumber allValues];
NSArray *arrrandomNumber = [oddNumber allValues];
// Turn the arrays into sets and intersect the two sets
NSMutableSet *oddNumberSet = [NSMutableSet setWithArray:arroddNumber];
NSMutableSet *randomNumbersSet = [NSMutableSet setWithArray:arrrandomNumber];
[oddNumberSet intersectSet:randomNumbersSet];
// The Values present in both arrays
NSLog(@"Common Values : %@", oddNumberSet);
看看你的价值观。确保它们有一个 isEqual: 方法和一个 hash 方法,这样你就可以将它们添加到一个集合中。使用第二个字典的所有值创建一个 NSSet,然后遍历第一个字典并检查集合中有哪些值。
请注意,如果值具有合适的哈希函数,则创建具有 N 个值的集合需要 O (N) 时间,并且在集合中查找值是常数时间。
短:
BOOL isSubset = [[oddNumber dictionaryWithValuesForKeys:[randomNumber allKeys]] isEqualToDictionary:randomNumber]
或更快:
__block BOOL isSubset = YES;
[randomNumber enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
id value = [oddNumber objectForKey:key];
if (!value || ![value isEqual:obj]) {
isSubset = NO;
*stop = YES;
}
}];