如何从包含特定键的NSmutablearray中删除所有字典?

时间:2013-02-27 07:32:51

标签: iphone ios ipad

我有一个IPhone应用程序,其中有NSMutableArray个词典。选择表格的每一行时,我将使用

删除字典
if (indexPath.row <[self.newmessagearrays count])
{
     [messagearrays removeObjectAtIndex:indexPath.row];
}

我有一个场景,我想删除所有字典,其中我的“来自id”键是相同的,当点击该行时。我试过这样,但没有效果:

 NSPredicate * pr = [NSPredicate predicateWithFormat:@"userid == %@",fromidstring];
[messagearrays filterUsingPredicate:pr];

3 个答案:

答案 0 :(得分:4)

您可以使用NSPredicate

过滤数组
NSPredicate * pr = [NSPredicate predicateWithFormat:@"containsKey == SOME_KEY"];
[messageArrays filterUsingPredicate:pr];

<强>更新

回应编辑/澄清:

NSPredicate * pr = [NSPredicate predicateWithBlock:
  ^(id dictionary, NSDictionary * bindings) {
    return (BOOL)![[dictionary objectForKey:@"fromid"] isEqual:@"190"];
}];
[messageArrays filterUsingPredicate:pr];

答案 1 :(得分:0)

数组将对象保存在某个索引处,字典保留对象和键 所以你的算法应该是这样的

使用循环逐个从数组中获取对象(字典),检查您的字典是否具有该特定键 如果是,请使用函数removeObjectAtIndex

从数组中删除该对象

答案 2 :(得分:0)

NSMutableIndexSet *discardedItems = [NSMutableIndexSet indexSet];
NSDictionary *item;
NSUInteger index = 0;

for (item in yourArrayOfNSDictionaries) {
    if ([dictionary objectForKey:theKeyYouWantToCheckFor] != nil) [discardedItems addIndex:index];
    index++;
}

[originalArrayOfItems removeObjectsAtIndexes:discardedItems];