如何从NSMutableArray中删除值

时间:2014-01-11 04:17:25

标签: ios nsmutablearray

我有一个NSMutableArray“坐标”,它给我这样的值

2014-01-11 09:52:15.479 DreamCloud[397:70b] (
        {
        1000 =         {
            Linecolor = 0X6495ED;
            Lines = "4-s";
            Xcord = "77.000000";
            Xposition = "54.500000";
            Ycord = "111.500000";
            Yposition = "51.500000";
        };
    },
        {
        1001 =         {
            Linecolor = 0X6495ED;
            Lines = "4-s";
            Xcord = "45.000000";
            Xposition = "42.500000";
            Ycord = "417.000000";
            Yposition = "54.000000";
        };
    },
        {
        1000 =         {
            Linecolor = 0X6495ED;
            Lines = "4-s";
            Xcord = "73.000000";
            Xposition = "50.500000";
            Ycord = "111.000000";
            Yposition = "51.000000";
        };
    }
)

在此我需要删除1001的值并重新创建没有1001的数组。我该怎么做。我是ios的新手,所以我不知道怎么做。

for (NSMutableDictionary *deltag in deletelinearray)
    {
        NSMutableDictionary *gettagsdeleted = [deltag objectForKey:[NSString stringWithFormat:@"%d",myV.tag]];
        NSLog(@"%@",gettagsdeleted);
        int starttag=[gettagsdeleted objectForKey:@"Starttag"];
        int endtag=[gettagsdeleted objectForKey:@"Endtag"];



    }
NSLog(@"%@",coordinates);

上面是代码,在“坐标”中我得到数组,起始标签和结束标签是1000,1001。坐标我不知道Kumar Kl所说的指数。

5 个答案:

答案 0 :(得分:4)

请考虑您的阵列名称是协调

for (NSDictionary *dict in coorditates) {
        if ([dict objectForKey:[NSString stringWithFormat:@"%d",1001]]) {
            [coorditates removeObject:dict];
            break;
        }
    }

你也可以使用 NSPredicate 但是,对于那个coorditates数组必须是NSMutableArray

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY self.@allKeys != %@", @"1001"];
[coorditates filterUsingPredicate:pred];

答案 1 :(得分:0)

您想调用removeObjectAtIndex:函数,但是您的数组似乎包含字典对象,并且您希望删除具有键1001的字符对象。您要避免的是删除循环数组的对象WHILE。

所以,我要做的是创建一个变量,一旦找到它就会保存项目的索引,然后循环遍历数组,一旦找到匹配的对象就存储索引并中断。之后,您不需要在删除项目后重新创建数组,删除您提供上述功能的索引处的对象将为您执行此操作。在您的情况下,您需要执行以下操作:

NSString *key = @"1001";
for (NSInteger index = 0; index < array.count; index++) {
    NSDictionary *dictionary = coordinates[index];

    if (dictionary[key]) {
        indexToDelete = index;
        break;
    }
}

[coordinates removeObjectAtIndex:1001];

答案 2 :(得分:0)

尝试使用循环代替。不是用键选择对象而是删除它。

for (NSMutableDictionary *deltag in deletelinearray)
{
    [coordinates removeObjectForKey:[NSString stringWithFormat:@"%d",myV.tag]];
}

答案 3 :(得分:0)

枚举数组中的项目时,修改(插入或删除)项目并不是一个好的编码实践。首先找到你的索引,然后删除它。

删除“1001”的详细信息后,您无需创建新阵列。你已经有了一个更新阵列。

NSString *deleteKey=@"1001";
__block int deleteIndex=-1;
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    for (NSString *key in [obj allKeys]) {
        if([key isEqualToString:deleteKey]){
            deleteIndex=idx;
            *stop=YES;
        }
    }
}];

if(deleteIndex>=0){
    [arr removeObjectAtIndex:deleteIndex];
}

答案 4 :(得分:0)

int i = 0;

for (NSDictionary *dict in coorditates)
{
    if ([dict objectForKey:@"1001"])
    {
        [coorditates removeObjectAtIndex:i];
    }
    i++;
}