从 NSMutableArray 中删除一个值
Posted
技术标签:
【中文标题】从 NSMutableArray 中删除一个值【英文标题】:Delete a value from NSMutable Array 【发布时间】:2014-04-24 08:19:02 【问题描述】:我有一个名为_groupCategoryCurrentIds
的NSMutableArray
,其数据采用这种格式
(
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]对象?