Objective-C: 减少 NSArray 中的属性
Objective-C: Reduce properties in NSArray
我有两个相似但不同的对象数组,我想合并它们。这些对象有一些共同的属性和一些我并不特别需要的独特属性。所以我的想法是将它们简化为它们共有的属性。
我的问题是我还没有找到去除数组中对象属性的方法。我想它可能有一个谓词或键值,但是,我还没有找到一种方法。属性是异构的,即字符串、NSDates 和 Bools。数组中有多个对象具有这些属性的值。
示例:
NSArray1
id (NSNuber)|title (NSString)|color(NSString)
NSArray2
id (NSNumber)|title (NSString)|length(NSNumber)
我如何从 NSArray1
中去除颜色并从 NSArray2
中去除长度以获得两个具有 id|title
的数组
这个问题有点模棱两可,因为它没有指出数组中对象的类型,但我们假设它们是字典。
无需删除属性,因为在构建结果数组时,您将放弃两个源对象(支持可变副本)...
NSArray *array1, *array2; // these are initialized with the dictionaries
NSMutableArray *result = [NSMutableArray array];
for (NSDictionary *d1 in array1) {
NSDictionary *d2 = [self elementMatching:d1 in:array2];
if (!d2) {
// what should we do if there's no match?
// maybe ignore, maybe just add it to result?
} else {
// here, d2 has id, title, length. needs color from d1
NSMutableDictionary *newD2 = [d2 mutableCopy];
newD2[@"color"] = d1[@"color"];
[result addObject:newD2];
}
}
- (NSDictionary *)elementMatching:(NSDictionary *)d in:(NSArray *)array {
for (NSDictionary *element in array) {
if ([element[@"id"] isEqual:element[@"id"]] && [element[@"title"] isEqual:element[@"title"]])
return element;
}
return nil;
}
请注意,此循环考虑了 array2
中没有与 array1
中找到的对象相匹配的对象的情况。您应该根据您的要求决定在那里做什么。它也不考虑 array2
的元素在 array1
中没有对应物的情况。您将需要另一个(类似的)循环来处理这些问题。
我有两个相似但不同的对象数组,我想合并它们。这些对象有一些共同的属性和一些我并不特别需要的独特属性。所以我的想法是将它们简化为它们共有的属性。
我的问题是我还没有找到去除数组中对象属性的方法。我想它可能有一个谓词或键值,但是,我还没有找到一种方法。属性是异构的,即字符串、NSDates 和 Bools。数组中有多个对象具有这些属性的值。
示例:
NSArray1
id (NSNuber)|title (NSString)|color(NSString)
NSArray2
id (NSNumber)|title (NSString)|length(NSNumber)
我如何从 NSArray1
中去除颜色并从 NSArray2
中去除长度以获得两个具有 id|title
这个问题有点模棱两可,因为它没有指出数组中对象的类型,但我们假设它们是字典。
无需删除属性,因为在构建结果数组时,您将放弃两个源对象(支持可变副本)...
NSArray *array1, *array2; // these are initialized with the dictionaries
NSMutableArray *result = [NSMutableArray array];
for (NSDictionary *d1 in array1) {
NSDictionary *d2 = [self elementMatching:d1 in:array2];
if (!d2) {
// what should we do if there's no match?
// maybe ignore, maybe just add it to result?
} else {
// here, d2 has id, title, length. needs color from d1
NSMutableDictionary *newD2 = [d2 mutableCopy];
newD2[@"color"] = d1[@"color"];
[result addObject:newD2];
}
}
- (NSDictionary *)elementMatching:(NSDictionary *)d in:(NSArray *)array {
for (NSDictionary *element in array) {
if ([element[@"id"] isEqual:element[@"id"]] && [element[@"title"] isEqual:element[@"title"]])
return element;
}
return nil;
}
请注意,此循环考虑了 array2
中没有与 array1
中找到的对象相匹配的对象的情况。您应该根据您的要求决定在那里做什么。它也不考虑 array2
的元素在 array1
中没有对应物的情况。您将需要另一个(类似的)循环来处理这些问题。