Сортировка массива с использованием "sortedArrayUsingSelector" приводит записи с пустым значением в верхней части массива - PullRequest
0 голосов
/ 02 апреля 2012

Когда я сортирую массив с помощью метода sortedArrayUsingSelector, все работает нормально, за исключением того, что он приносит записи с БЛАНКОВЫМИ именами в верхней части массива.Я не хочу записей с пустыми именами в верхней части массива, вместо этого они должны быть последними в массиве.Как я могу это реализовать?Вот мой код

self.tempArray = [NSMutableArray arrayWithArray:[self.tempArray sortedArrayUsingSelector:@selector(compare:)]];

Я сортирую массив по имени пользователя.Вот код метода сравнения

    -(NSComparisonResult)compare:(User*)user {

    return [self.firstName compare:user.firstName];
}

Любая помощь высоко ценится.Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Измените метод сравнения, чтобы вы по-разному относились к пустым именам.

-(NSComparisonResult)compare:(User*)user 
{ 
    NSString *selfName;
    NSString *userName;
    if (self.firstName && ![self.firstName isEqualToString:@""])
        selfName = self.firstName;
    else
        selfName = @"zzzzzzzzzz";

    if (user.firstName && ![user.firstName isEqualToString:@""])
        userName = user.firstName;
    else
        userName = @"zzzzzzzzzz";

    return [selfName localizedCaseInsensitiveCompare:userName]; 
}

Вероятно, вы можете написать это в меньшем количестве строк кода, но я оставил это так для удобства чтения. nil нельзя использовать в качестве компаратора для сравнения строк.

В настоящее время это (правильно) сортировка пробелов по верху, поскольку они располагаются перед заполненными строками в алфавитно-цифровой сортировке.

1 голос
/ 02 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...