我有一个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所说的指数。
答案 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++;
}