Asa*_*han 12 unique objective-c nsarray
我有一个包含自定义对象的数组.每个数组项都有一个名为"name"的字段.现在我想根据此名称值删除重复的条目.
我应该如何实现这一目标.
提前致谢.
Pey*_*loW 28
我不知道框架提供的任何标准方法.所以你必须在代码中做到这一点.这样的事情应该是可行的:
NSArray* originalArray = ... // However you fetch it
NSMutableSet* existingNames = [NSMutableSet set];
NSMutableArray* filteredArray = [NSMutableArray array];
for (id object in originalArray) {
if (![existingNames containsObject:[object name]]) {
[existingNames addObject:[object name]];
[filteredArray addObject:object];
}
}
Run Code Online (Sandbox Code Playgroud)
您可能必须自己编写此过滤方法:
@interface NSArray (CustomFiltering)
@end
@implementation NSArray (CustomFiltering)
- (NSArray *) filterObjectsByKey:(NSString *) key {
NSMutableSet *tempValues = [[NSMutableSet alloc] init];
NSMutableArray *ret = [NSMutableArray array];
for(id obj in self) {
if(! [tempValues containsObject:[obj valueForKey:key]]) {
[tempValues addObject:[obj valueForKey:key]];
[ret addObject:obj];
}
}
[tempValues release];
return ret;
}
@end
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但这是另一种可能性,取决于你需要什么.
Apple确实提供了一种方法 - 键值编码收集操作符.
对象运算符允许您对集合执行操作.在这种情况下,您需要:
@distinctUnionOfObjects
@distinctUnionOfObjects运算符返回一个数组,该数组包含由运算符右侧的键路径指定的属性中的不同对象.
NSArray *distinctArray = [arrayWithDuplicates valueForKeyPath:@"@distinctUnionOfObjects.name"];
但是,在您的情况下,您需要整个对象.所以你需要做的是双重的:1)@distinctUnionOfArrays改为使用.例如,如果您有来自其他集合的这些自定义对象,请使用@distinctUnionOfArray.myCollectionOfObjects
2)isEqual:如果它们的.name相等,则对这些对象进行实现
| 归档时间: |
|
| 查看次数: |
19326 次 |
| 最近记录: |