【问题标题】:Delete Specific Items from NSMutableArray从 NSMutableArray 中删除特定项
【发布时间】:2015-05-28 20:32:29
【问题描述】:

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

在这种特殊情况下,我想删除满足以下所有条件的项目:

  • 城市:西雅图
  • 州:西澳
  • 时间戳:超过 60 秒

我的数组的 NSLog 如下所示:

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

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

【问题讨论】:

    标签: ios objective-c nsmutablearray nsarray


    【解决方案1】:

    您可以使用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];
    

    【讨论】:

      【解决方案2】:

      不,过滤掉要删除的项目然后删除它们是正确的方法。它并不复杂,因为显然获取指定的项目是用谓词过滤+删除它们就是删除它们。解决方案怎么能不那么复杂?

      也许过滤掉不删除的项目对您来说更容易。只需在谓词中添加 NOT

      【讨论】:

        【解决方案3】:

        在这里,您的时间戳每次都是唯一的。所以你已经删除了基于时间戳的数据库。

        首先,您必须从该数组中获取该时间戳的索引。

        NSInteger index = [[array valueForKey:@"timestamp"] indexOfObject:timestamp];
        

        在得到这个数组索引后,你必须从那个索引中删除数据。

        [array removeObjectAtIndex:index];
        

        【讨论】:

        • 问题是关于删除符合 3 个不同要求的所有项目 - 寻找一个单一的时间戳对那里有什么帮助?
        • 如果您可以使用时间戳进行删除,那为什么还要检查 3 个要求?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多