2013-02-18 73 views
0

我将数值从200到1作为字符串存储在名为beaus的数组中。如何按iOS中的最大值和最小值排序

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar" ascending:NO]; 
    [beaus sortUsingDescriptors:@[sortDesc]]; 

但是,这只能按第一个数字排序(2在10以上)。有什么方法可以按数量排序?

+0

请更确切地说明这个值是什么类型?的NSString?或int ?,什么类型是“dataoflar” – AlexWien 2013-02-18 18:33:05

+0

为什么你将数字存储为字符串?为什么不把它们存储为数字? – rmaddy 2013-02-18 18:33:11

+0

这是我带来数据的方式。有什么方法可以在数组中将它们转换为数字吗?......不,这些数据必须由字符串引入,否则我会改变它。 – user1803649 2013-02-18 18:37:39

回答

1

对其进行排序,您可以这样更新您的排序描述:

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar.integerValue" ascending:NO]; 
[beaus sortUsingDescriptors:@[sortDesc]]; 

这将得到每个字符串的整数值,排序将基于该数字而不是字符串值。

-2

如果你必须使用字符串,然后用零填充你的数字,那么它会像你想要的那样排序,而不是其他的更改,如下所示: '002'而不是'2'和'034'而不是' 34'

+0

你不能将一个NSString强制转换为NSUIntger! – AlexWien 2013-02-18 18:51:03

+0

如果你必须使用字符串,然后左边用零填充你的数字,那么它会像你想要的那样排序,没有其他变化,像这样:'002'而不是'2'和'034'而不是'34' – jonathan3087 2013-02-18 18:54:02

+0

更糟你做不到? – AlexWien 2013-02-18 18:59:20

0

如果由于某种原因,你不想给字符串转换导入过程中为int,你 必须编写和使用自己的选机:

这显示了如何通过财产‘datatoflat’beause排序包含数字的NSString类型。排序完成升序。最后一行为return (i1- i2)

NSArray *sortedArray; 
sortedArray = [beaus sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
    NSString* s1 = [(NSString*) a dataoflar]; 
    NSString* s2 = [(NSString*) b dataoflar]; 

    int i1 = [s1 integerValue]; 
    int i2 = [s2 integerValue]; 
    return (i2 - i1); 
}]; 
1

假设也没关系,该值是最后一个数组中NSString的,你应该这样

NSMutableArray *mutableBeaus = [[beaus mutableCopy] autorelease]; 
[mutableBeaus sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
    return [obj1 compare:obj2 options:NSNumericSearch]; 
}]; 

// mutableBeaus now has the array sorted in an ascending order 1 < 002 < 3 
相关问题