NSMutableArray filterUsingPredicate 仅超过某个索引
Posted
技术标签:
【中文标题】NSMutableArray filterUsingPredicate 仅超过某个索引【英文标题】:NSMutableArray filterUsingPredicate only past a certain index 【发布时间】:2012-02-16 16:55:49 【问题描述】:我正在尝试使用 filterUsingPredicate 剔除我的 NSMutableArray 元素。
棘手的部分是我总是希望在数组中保留至少 10 个项目,无论它们是否通过谓词测试。所以像:
NSPredicate * cullPredicate = [NSPredicate predicateWithFormat:
@"distanceFromCurrent <= 25 OR index < 10"];
[self.myArray filterUsingPredicate:cullPredicate];
“OR 索引
这可能与谓词?还是我需要提取另一个元素从 10 开始的数组,应用过滤器,然后将其添加回原始数组?
【问题讨论】:
【参考方案1】:NSPredicate 有一个-predicateWithBlock:
方法,您可以使用它来执行此操作。像这样的:
NSArray *array = [[self.myArray copy] autorelease];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings)
if ([array indexOfObject:evaluatedObject] < 10) return YES;
return evaluatedObject.distanceFromCurrent <= 25;
];
[self.myArray filterUsingPredicate:predicate];
【讨论】:
应该是-filteredArrayUsingPredicate:
而不是-filterWithPredicate:
@RichardJ.RossIII 他说这是一个他试图过滤的 NSMutableArray。 -[NSMutableArray filterUsingPredicate:]
是正确的方法(我复制了他的错误,尽管我认为它看起来不正确)。无论如何,已通过 RichardLovejoy 修复,建议对我的答案进行修改。
是的,我在问题和答案中都进行了编辑,希望它显示出来【参考方案2】:
__block int count = 0;
NSObject * object = myArray[0];
NSPredicate * predicate = [NSPredicate predicateWithBlock:^BOOL(QDItem * evaluatedObject, NSDictionary * bindings)
if (object.price == evaluatedObject.price)
count ++;
return YES;
return NO;
];
[myArray filterUsingPredicate:predicate];
NSLog(@"%d", count); // output: 1 if return YES
【讨论】:
以上是关于NSMutableArray filterUsingPredicate 仅超过某个索引的主要内容,如果未能解决你的问题,请参考以下文章
将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults
访问另一个 NSMutableArray 中的对象的 NSMutableArray(即嵌套对象访问)
在过滤另一个 NSMutableArray 的基础上过滤 NSMutableArray
从 NSData 的 NSMutableArray 转换为 NSString 的 NSMutableArray?