从 NSMutableArray 中删除一个值

Posted

技术标签:

【中文标题】从 NSMutableArray 中删除一个值【英文标题】:Delete a value from NSMutable Array 【发布时间】:2014-04-24 08:19:02 【问题描述】:

我有一个名为_groupCategoryCurrentIdsNSMutableArray,其数据采用这种格式

(
        
        id = 2;
        name = Fashion;
    ,
        
        id = 5;
        name = Leisure;
    ,
        
        id = 14;
        name = Clothing;
    ,
        
        id = 17;
        name = Sports;
    ,
        
        id = 2;
        name = Fashion;
    ,
        
        id = 36;
        name = Men;
    ,
        
        id = 34;
        name = Woodland;
    ,
        
        id = 30;
        name = Accessories;
    ,
        
        id = 4;
        name = Entertainment;
    ,
        
        id = 40;
        name = Education;
    
)

我正在尝试删除 id = 40 的对象,我就是这样做的

_groupCategoryCurrentIds = [[_groupCategoryCurrentIds filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NOT id IN %@", @"40"]] mutableCopy];

但这也会删除 id =4 的对象。有什么建议我做错了吗?

【问题讨论】:

【参考方案1】:

使用

[NSPredicate predicateWithFormat:@"id != %@", @"40"]

[NSPredicate predicateWithFormat:@"id != %@", @40]

取决于 id 是存储为字符串还是数字。

请注意,您可以将代码简化为

[_groupCategoryCurrentIds filterUsingPredicate:...];

如果_groupCategoryCurrentIds 是一个可变数组。


谓词中的“IN”用于测试数组或集合中的成员关系,例如

[NSPredicate predicateWithFormat:@"NOT id IN %@", @[@40, @50]]

获取 id 既不是 40 也不是 50 的所有对象。

未记录在右侧使用带有 字符串 的“IN” 在Predicate Programming Guide。 它似乎表现得像“是一个子字符串”,所以在你的情况下

[NSPredicate predicateWithFormat:@"NOT id IN %@", @"40"]

给出id不是“40”子串的所有对象。这可以解释你的结果。 但同样,这不是记录在案的行为。

【讨论】:

+1 得到很好的答案,如果我想获得 id 在 40 到 50 之间的值,那么为了提高我的知识,那么我应该使用哪种模式? @iPatel: [NSPredicate predicateWithFormat:@"id >= %@ AND id <= %@", @40, @50][NSPredicate predicateWithFormat:@"id BETWEEN %@", @[@40, @50]] 如果 id 存储为 数字(而不是 字符串)。

以上是关于从 NSMutableArray 中删除一个值的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能从NSMutableArray中删除[NSNull Null]对象?

NSMutableArray 从 plist 返回 Null

NSMutableArray基本概念

从 NSMutableArray 中删除随机项

从 NSMutableArray 中删除对象时崩溃

从 UITableView NSMutableArray 和 ManagedObjectContext 中删除行