嗨,我的NSArray包含这样的重复项(我必须删除重复项)
标题:父亲节
标题:父亲节
标题:父亲节
标题:选举日
标题:选举日
标题:选举日
标题:复活节
标题:复活节
标题:地球日
标题:地球日
标题:地球日
片名: Cinco de Mayo
片名: Cinco de Mayo
片名: Cinco de Mayo
标题:平安夜
标题:平安夜
标题:平安夜
标题:圣诞节标题:圣诞节标题:圣诞节
我只保留了一个名字,不需要其他重复的名字。我是如何做到这一点的,请指导我一点清楚的解释,以解决这个问题。谢谢。
发布于 2011-03-12 15:37:55
如果你关心排序,你可以创建一个新的可变数组,遍历旧数组中的每个对象,只有当它不存在时才添加它:
NSMutableArray *uniqueItems = [NSMutableArray array];
for (id item in allItems)
if (![uniqueItems containsObject:item])
[uniqueItems addObject:item];如果不是这样,那么只使用set会简单得多:
NSSet *uniqueItems = [NSSet setWithArray:allItems];发布于 2011-03-14 03:54:24
您希望消除重复数据的NSArray是否已排序?从你的问题看似乎是这样的。在这种情况下,可以使用以下代码:
NSMutableArray *uniqueItems = [NSMutableArray array];
id lastSeenUniqueObject = nil;
for (NSObject *item in allItems) {
if (![item isEqual:lastSeenUniqueObject]) {
[uniqueItems addObject:item];
lastSeenUniqueObject = item;
}
}与rpetrich的答案的(大约) N^2复杂度相比,这具有N(即快速)的运行时复杂度。
如果您不知道Array的内容是排序的,那么您有两个选择:
A)只需对其进行排序,然后应用上面的算法,这就给出了n log n运行时的复杂性(仍然比N^2好得多),
或
B)使用NSMutableSet来跟踪已经看到的对象(或使用存储桶和散列的任何其他数据结构)。代码将如下所示:
NSMutableArray *uniqueItems = [NSMutableArray array];
NSMutableSet *seenItems = [NSMutableSet set];
for (NSObject *item in allItems) {
if (![seenItems containsObject:item]) {
[uniqueItems addObject:item];
[seenItems addOBject:item];
}
}这也提供了比N^2更好的运行时。
发布于 2011-03-12 16:28:45
看看这个简单的..
NSMutableArray *dateArray = [[NSMutableArray alloc]initWithObjects:@"December 29,2010",
@"December 28,2010",
@"December 22,2010",
@"December 22,2010",
@"December 22,2010",@"December 21,2010",@"December 28,2010",nil];为了避免重复使用,请使用此...
NSSet *cleanedArray = [NSSet setWithArray:dateArray];
NSArray *array = [[NSArray alloc]initWithArray:[cleanedArray allObjects]];
for (int i=0; i<[array count]; i++) {
NSLog(@"The Given Array is %@",[array objectAtIndex:i]);
}https://stackoverflow.com/questions/5281295
复制相似问题