如何删除特定的数组值而不是对象?

时间:2015-11-12 06:27:39

标签: ios objective-c nsmutablearray

这是我的数组包含的值:

(
        {
        yes = 0;
    },
        {
        yes = 1;
    },
        {
        yes = 2;
    },
        {
        yes = 3;
    },
        {
        yes = 4;
    }
)

现在我想删除yes = 1;

这是我的代码

-(void)touchup:(UIButton*)click
{


    dicButtonState=[[NSMutableDictionary alloc]init];


    if(click.selected==NO)
    {
        click.backgroundColor=[UIColor colorFromHexString:@"#ffc400"];
         click.selected=YES;



      [dicButtonState setValue:@(click.tag) forKey:@"yes"];
//        [arrButtonState addObject:btntag];

       [arrButtonState addObject:dicButtonState];

    }
#pragma mark deleting product on user deselection
    else
    {

        click.backgroundColor=[UIColor grayColor];
        click.selected=NO;


    }

}

这是我维护用户选择按钮状态的代码,我将这些值存储在数组中。

我如何删除它,请任何人帮我这样做..

2 个答案:

答案 0 :(得分:1)

最简单的方法是找到正确的字典,然后使用[array removeObject:foundObject];

要找到合适的对象,您有几个选择。最简单的可能是

NSDictionary *foundObject;
[array enumerateObjectsUsingBlock:^(NSDictionary *d, NSUInteger idx, BOOL *stop) {
    if ([d[@"yes"] isEqual:@(1)]) {
        *stop = YES;
        foundObject = d;
    }
}];

[array removeObject:foundObject];

这假设array是可变的。如果不是,请用这些行包装上面的代码(根据需要调整变量名称):

NSMutableArray *array = [originalArray mutableCopy];

originalArray = [array copy];

P.S。您也可以保存索引而不是对找到的对象的引用,然后使用[array removeObjectAtIndex:foundIndex]。这是一个偏好问题。为了从小阵列中移除单个元素,性能特征无关紧要。

答案 1 :(得分:1)

如果您将标记替换为任何其他,则可以通过 NSPredicate 执行此操作。

说,你这样的数据

NSArray *dataArray = @[@{@"value":@(0)},@{@"value":@(1)},@{@"value":@(2)},@{@"value":@(3)},@{@"value":@(4)}];

然后你可以使用NSPredicate来过滤这个字典数组。

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"value != %@",@(1)];
NSArray *filteredArray = [dataArray filteredArrayUsingPredicate:predicate];