Как удалить дубликаты в NSArray? - PullRequest
0 голосов
/ 12 марта 2011

Я получил доступ к файлу данных из sqlite как NSMutableArray [model_Array], в котором у меня есть дубликаты информации [два / три], поэтому я хочу удалить это, я попытался назначить MutableArray другому NSMutableArray [allItems] с помощью двух разных идей, приведенных ниже

AppDelegate *readTheDatabase = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

allItems = [[NSMutableArray alloc] initWithArray:readTheDatabase.model_Array];  
NSSet *uniqueItems; 
uniqueItems = [NSSet setWithArray:allItems];

или

NSMutableArray *uniqueItems = [NSMutableArray array];
for (id item in allItems)
    if (![uniqueItems containsObject:item])
        [uniqueItems addObject:item];

, но невозможно удалить дубликаты данных.Пожалуйста, помогите всем и предложите мне преодолеть эту проблему.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 12 марта 2011

Ваши объекты в массиве, очевидно, не возвращают true для метода isEqual:.

Какой тип объекта содержится в массиве?

Я предполагаю, что это некоторый пользовательский класс модели, который представляетданные в базе данных.

Вам следует поискать документацию для методов NSObject и isEqual: и hash:.

Вы узнаете, как выражать, когда два объекта равны, как это NSArray и NSSet и т. д. определяют, содержатся ли объекты в коллекции.

1 голос
/ 12 марта 2011

если вы получаете дубликаты из запроса к базе данных, я бы предложил переформулировать запрос, чтобы он не давал дубликатов. то есть. используйте SELECT DISTINCT ... вместо SELECT ....

0 голосов
/ 12 марта 2011

Если вы используете NSSet, тогда установите его на NSArray - в противном случае это приведет к падению, потому что это будет в NSSet, а не NSSArray.

NSSet *uniqueItems= [NSSet setWithArray:YourArray];

NSArray *array = [[NSArray alloc]initWithArray:[uniqueItems allObjects]]; 

for (int i=0; i<[array count]; i++) {
    NSLog(@"The Given Array is %@",[array objectAtIndex:i]);
}

Удачи, это очень просто сделать .......

...