/ / по-добър начин за премахване на двойни (NSManagedObjects) от NSArray (също логически недостатък) - ios, nsarray, nsmanagedobject

по-добър начин за премахване на двойни (NSManagedObjects) от NSArray (също логически недостатък) - ios, nsarray, nsmanagedobject

Направих следния метод за премахване на двойките, но той не работи напълно.

Благодаря ти за помощта,

   -(NSMutableArray*)removeDuplicateCars:(NSMutableArray*)array{
NSMutableArray *noDuplicates =[[NSMutableArray alloc]init];
for (int i=0; i<[array count]; i++) {
int counter =0;
Car *car =(Car*)[array objectAtIndex:i];
if ([noDuplicates count]==0) {
[noDuplicates addObject:car];
}
for (int i=0; i<[noDuplicates count]; i++) {
Car *car2 =(Car*)[array objectAtIndex:i];
if (![car.name isEqualToString:car2.name]) {
counter++;
}
}
if (counter==[noDuplicates count]) {
[noDuplicates addObject:car];
}
}
NSLog(@"number of results = %i",[noDuplicates count]);
return noDuplicates;
}

Отговори:

1 за отговор № 1

Създайте масив, наречен "addCars" - ще го използвате, за да съхранявате името на всяка уникална кола.

Във всяка итерация използвайте [NSArray containsObject:], за да проверите дали текущото име вече е добавено към "addCars". Ако не, добавете името в "addCars" и колата в "noDuplicates". В противен случай пропуснете този елемент, тъй като той вече е добавен към noDuplicates.


0 за отговор № 2

Бъди сигурен [isEqual:] и [hash] се изпълнява, както очаквахте

-(NSMutableArray*)removeDuplicateCars:(NSMutableArray*)array{
NSOrderedSet *set = [[NSOrderedSet alloc] initWithArray:array];
NSMutableArray *newArr = [NSMutableArray arrayWithCapacity:[set count]];
for (id obj in set) {
[newArr addObject:obj];
}
return newArr;
}

Ти използва ![car.name isEqualToString:car2.name] да сравнявате обекти, така че аз вярвам, че искате да филтрирате обекти със същото име? Необходимо е да заличите [isEqual:] за Car

- (BOOL)isEqual:(id)other {
if ([other isKindOfClass:[self class]]) {
return [self.name isEuqalToString: [other name]];
}
return NO;
}

- (NSUInteger)hash {
return [self.name hash];
}

също така проверете този въпрос Най-добрият начин да премахнете дублиращите се стойности от NSMutableArray в Objective-C?