我正在尝试执行相对简单的任务,即删除符合特定条件的NSMutableArray中的项目。
在这种特殊情况下,我想删除以下所有内容的项目:
我的数组的NSLog如下所示:
array = (
{
city = "Seattle";
state = "WA";
timestamp = 1432844384;
},
{
city = "Dallas";
state ="TX";
timestamp = 1432844415;
},
{
city = "Seattle";
state = "WA";
timestamp = 1432845329;
}
)
我尝试过使用NSPredicate来过滤数组,但我认为这可能会使事情过于复杂。任何建议都会很棒!谢谢!
答案 0 :(得分:4)
您可以使用indexesOfObjectsPassingTest:
(see docs)
NSIndexSet *indexes = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
// check if obj is matching all your criteria
}
然后使用removeObjectsAtIndexes:
(see docs)
[array removeObjectsAtIndexes:indexes];
答案 1 :(得分:1)
不,过滤掉要删除的项目然后删除它们是正确的方法。它并不复杂,因为显然获取指定的项目是使用谓词过滤+删除它们正在删除它们。解决方案怎么可能不那么复杂?
您可能更容易过滤掉不删除的项目。只需在谓词中添加NOT
即可。
答案 2 :(得分:0)
此处您的时间戳每次都是唯一的。所以你有基于时间戳的删除数据。
首先,您必须从该数组中获取该时间戳的索引。
NSInteger index = [[array valueForKey:@"timestamp"] indexOfObject:timestamp];
获取此数组索引后,您必须从该索引中删除数据。
[array removeObjectAtIndex:index];