我有一个 NSArray 的 NSDictionary 值,它们的 NSDictionay 结构看起来像这样
ID = 22;
SERIESID = 33;
YEAREND = 2002;
YEARSTART = 1996;
我的数组中有十几个这样的元素,我想知道如何从 NSArray 中删除具有相同SERIESID的元素,或者在 NSArray 已经制作之后是否有可能。
任何帮助,将不胜感激。
我有一个 NSArray 的 NSDictionary 值,它们的 NSDictionay 结构看起来像这样
ID = 22;
SERIESID = 33;
YEAREND = 2002;
YEARSTART = 1996;
我的数组中有十几个这样的元素,我想知道如何从 NSArray 中删除具有相同SERIESID的元素,或者在 NSArray 已经制作之后是否有可能。
任何帮助,将不胜感激。
基本上,遍历数组,跟踪您看到的 SERIESID,如果当前元素的 SERIESID 是重复的,则将其标记为删除。
像这样:
NSMutableSet *seen = [NSMutableSet set];
NSMutableIndexSet *toDelete = [NSMutableIndexSet indexSet];
[yourArray enumerateObjectsUsingBlock:^(id dict, NSUInteger i, BOOL *stop) {
if ([seen containsObject:dict[@"SERIESID"]]) {
[toDelete addIndex:i];
} else {
[seen addObject:dict[@"SERIESID"]];
}
}];
[yourArray removeObjectsAtIndexes:toDelete];
(作为旁注,即使它不是最直观的方法,您也必须以这种方式进行删除。NSMutableArray 并非设计为在您循环遍历它时进行更改,所以您如果你只是尝试removeObjectAtIndex:
在你的循环中使用,会得到错误。这就是为什么我们建立一个我们想要删除的对象列表,然后在最后把它交给数组。)
我没有对此进行测试,但是您可以执行类似的操作:
NSMutableArray *seriesHolder = [NSMutableArray alloc]init];
for(NSMutableDictionary *dict in yourMutableArray)
{
NSString *seriesID = [dict objectForKey:@"SERIESID"];
if(![seriesHolder containsObject:seriesID])
{
[seriesHolder addObject:seriesID];
}
else
{
[yourMutableArray removeObject:dict];
}
}
创建一个NSMutableSet
以包含 的使用值SERIESID
。循环for
遍历数组中的每个字典。当您遍历每个字典时,检查字典SERIESID
键的对象。如果集合中还没有它,请添加它。如果它已经存在,则从数组中删除该对象。迭代完成后,数组中的每个值将只有一个对象SERIESID
。请注意,显然 this 将意味着具有唯一性的字典的第一个实例SERIESID
将被保留,因此在遍历数组之前,请确保字典的顺序可行。
如果您需要有关完成此操作所需的精确方法的更多特定信息,请查看文档。