从NSMutableArray中删除特定项目

时间:2015-05-28 20:32:30

标签: ios objective-c nsmutablearray nsarray

我正在尝试执行相对简单的任务,即删除符合特定条件的NSMutableArray中的项目。

在这种特殊情况下,我想删除以下所有内容的项目:

  • city:Seattle
  • 州:WA
  • 时间戳:超过60秒

我的数组的NSLog如下所示:

array = (
            {
            city = "Seattle";
            state = "WA";
            timestamp = 1432844384;
        },
            {
            city = "Dallas";
            state ="TX";
            timestamp = 1432844415;
        },
        {
            city = "Seattle";
            state = "WA";
            timestamp = 1432845329;
        }
    )

我尝试过使用NSPredicate来过滤数组,但我认为这可能会使事情过于复杂。任何建议都会很棒!谢谢!

3 个答案:

答案 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];