Сравнение NSString с NSNumber в строке - PullRequest
1 голос
/ 27 июня 2011

Кто-то еще разработал этот класс, чтобы иметь NSString для идентификатора (я не знаю, почему честно). Таким образом, некоторые объекты имеют @ "" для своего идентификатора (пусто), некоторые имеют @ "id12345" или что-то в этом роде. Я хочу отсортировать по номеру для моего UITableView

Первое, что я сделал, это использовал:

stringByReplacingOccurrencesOfString:@"id" withString:@""];

чтобы я мог получить номер. Я уверен, что есть удобный метод для получения NSInteger от NSString, но я просто еще не посмотрел его. Тогда я застрял, потому что

, поскольку у моего объекта, Markers, есть NSString этого идентификатора, как мне отсортировать по номеру, не заменяя исходного значения в объекте? Мои первые мысли были получить идентификационный номер из строки nsstring и отсортировать. Однако я также не хотел заменять исходную строку. У меня есть класс, который просто отображает и сортирует данные.

Это то, что я имею до сих пор:

- (NSArray *)sortByID:(NSArray *)sortDescriptors {
    for (Marker *m in self.MarkersList) {
        if (![m.id length] == 0) {
            NSString *str = [m.id stringByReplacingOccurrencesOfString:@"id" withString:@""];
        // don't know what to do here....
        }
    }
    return [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors];
}

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Я действительно не понимаю, почему вы используете sortDescriptors здесь, поскольку вы сортируете только по числам.

Я бы использовал блок сравнения (при условии, что вы работаете на iOS 4 или выше) и сделал бы это, как показано ниже:

- (NSArray *)sortByID {

 NSArray* orderedList = [self.MarkersList 
                         sortedArrayUsingComparator:^(id obj1, id obj2) 
                     {
                        Marker* m1 = (Marker*) obj1;
                        Marker* m2 = (Marker*) obj2;

                        NSString* str;

                        str = [m1.id stringByReplacingOccurrencesOfString:@"id"
                               withString:@""];
                        NSInteger num1 = [str integerValue];

                        str = [m2.id stringByReplacingOccurrencesOfString:@"id" 
                               withString:@""];
                        NSInteger num2 = [str integerValue];

                        NSComparisonResult result;
                        if (num1 < num2) {
                            result = NSOrderedAscending;
                        } else if (num1 == num2 ) {
                            result = NSOrderedSame;
                        } else {
                            result = NSOrderedDescending;
                        }

                        return result;
                    }];


return orderedList;
}
0 голосов
/ 27 июня 2011

Итак, если вам гарантировано, что все ваши строки выглядят как id ######, то после замены идентификатора из строки вы можете использовать метод intValue строки для получения значения int строки, а затем просто сравнить дваинтс ... надеюсь, это поможет

...