Удаление дубликатов в nsarray
как я могу удалить дубликаты в nsarray. например, мой массив содержит следующие данные. Я хочу сравнить с соседними датами, чтобы избежать дубликатов, но с ошибкой.
Может ли кто-нибудь вести меня, что я ошибаюсь
календарь сначала -
(
2010-09-25 17:00:00 GMT,
"AAA",
2010-09-25 17:00:00 GMT,
"AAA",
2010-09-26 17:00:00 GMT,
"BBB",
2010-09-26 17:00:00 GMT,
"BBB",
2010-09-27 17:00:00 GMT,
"CCCC",
2010-09-27 17:00:00 GMT,
"CCC",
2010-09-28 17:00:00 GMT,
"AAA",
2010-09-28 17:00:00 GMT,
"AAA",
2010-09-29 17:00:00 GMT,
"DDDD",
2010-09-29 17:00:00 GMT,
"DDDD",
2010-09-30 17:00:00 GMT,
"BBBB"
)
мой код
NSArray dates; //dates contain above values
NSMutableArray *temp_date = [[NSMutableArray alloc] init];
for (int i=0; i<[dates count]; i+=2){
BOOL day;
if ([dates count]-2 >i) {
day = [[dates objectAtIndex:i] compare:[dates objectAtIndex:i+2]];
}
if (day) {
[temp_date addObject:[dates objectAtIndex:i]];
[temp_date addObject:[dates objectAtIndex:i+1] ];
}
}
С уважением,
Sathish
Ответы
Ответ 1
Вы можете использовать наборы. Дубликаты будут удалены автоматически после создания.
NSArray *cleanedArray = [[NSSet setWithArray:dates] allObjects];
Помните, что набор неупорядочен.
В соответствии с комментарием Brent, более поздним решением проблемы, которая позволит вам сохранить элементы в порядке.
[[NSOrderedSet orderedSetWithArray:dates] array]
Ответ 2
Самый чистый путь
NSArray *noDuplicatesDates = [dates valueForKeyPath:@"@distinctUnionOfObjects.self"];
Ответ 3
Чтобы найти одинаковые объекты, лучше использовать –indexOfObjectIdenticalTo:
или - indexOfObjectIdenticalTo:inRange:
Ответ 4
используйте это, если вы использовали mutableArray.
NSArray *copy = [mutableArray copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator]) {
if ([mutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
[mutableArray removeObjectAtIndex:index];
}
index--;
}
[copy release];