在字符串中比较NSString和NSNumber

时间:2011-06-27 16:04:17

标签: iphone nssortdescriptor

其他人设计这个类有一个ID的NSString(我不知道为什么说实话)。所以,有些对象的ID为“”“(空白),有些对象有@”id12345“或类似的东西。我想按我的UITableView的数字排序

我做的第一件事就是使用:

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

所以我可以得到这个号码。我确信有一种方便的方法可以从NSString中获取NSInteger,但我还没有查找过。然后我有点卡住,因为

因为我的对象Markers有一个这个ID的NSString,如何在不替换对象原始值的情况下按数字排序?我最初的想法是从nsstring中获取id号并进行排序。但是,我也不想替换原来的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 个答案:

答案 0 :(得分:2)

我真的不明白为什么你在这里使用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;
}

答案 1 :(得分:0)

因此,如果您保证所有字符串看起来都像id ######,那么在从字符串替换id之后,您可以使用字符串intValue方法来获取字符串的int值,然后只需比较两者ints ...希望这会有所帮助