Устранить двойные записи в массиве и отсортировать результат - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть приложение, которое получает информацию из списка.plist - это массив Dictionaries с ключами (автор, кошка, контент).Теперь я хотел бы показать категории в таблице.Поэтому мне нужны все уникальные записи категории в отсортированном виде.

Я успешно реализовал следующий способ, но мне интересно, если это «правильное» решение.

  1. Пройдите через массив plist и создайте новый NSMutableArray со всеми записями категорий словаря
  2. поместите NSMutableArray в NSSet, чтобы получить уникальные элементы
  3. поместите NSSet в NSArray, чтобы иметь возможность отсортировать его.
  4. вернуть NSMutableArray, начатый с отсортированным NSArray

Я не чувствую, что это правильный способ сделать это.Любые предложения, чтобы сделать это лучше?

Большое спасибо!

//InhaltefromWEb is a NSMutableArray
-(NSArray*) getCategories {
NSMutableArray* categorieTemp = [[NSMutableArray alloc] init];  

unsigned count = [InhalteFromWeb count];
while (count--) {
    NSString *tempString;
    tempString=[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY];
    NSLog(@"tempString %@", tempString );
    [categorieTemp addObject:tempString];
}

NSSet *uniqueElements = [NSSet setWithArray:categorieTemp];
NSLog(@"categories from engine %@", categorieTemp);
NSArray* tempAr = [[[NSArray alloc] initWithArray:[uniqueElements allObjects]]sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

return  [NSMutableArray arrayWithArray:tempAr];

}

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

Я делаю это для сортировки массива по дате:

[array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        NSDate *date1 = [obj1 objectForKey:@"datum"] == nil ? nilDate : [obj1 objectForKey:@"datum"];
        NSDate *date2 = [obj2 objectForKey:@"datum"] == nil ? nilDate : [obj2 objectForKey:@"datum"];
        return (NSComparisonResult)[date2 compare: date1];
    }];
0 голосов
/ 17 декабря 2011

Проверить существующую строку с помощью [categorieTemp containsObject:tempString] и отсортировать ее с помощью [categorieTemp sortUsingComparator:...]

Пример:

[categorieTemp sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
    return [(NSString *)obj1 caseInsensitiveCompare:(NSString *)obj2];
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...