其他人设计这个类有一个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];
}
答案 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 ...希望这会有所帮助