0

我将 200 到 1 的值作为字符串存储在一个名为 beaus 的数组中。

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

但是,这仅按第一个数字对它们进行排序(2 大于 10)。有没有办法按数量排序?

4

4 回答 4

1

假设最终数组中的值是 NSStrings 并不重要,您应该像这样对其进行排序

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
于 2013-02-18T18:58:52.993 回答
1

您可以像这样更新您的排序描述:

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

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

于 2013-02-18T19:04:45.043 回答
0

如果由于某些原因您不想在导入期间将字符串转换为 int,则必须编写并使用自己的排序器:

这显示了如何通过包含数字的 NSString 类型的属性“datatoflat”进行排序。排序完成升序。对于降序交换最后一行到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);
}];
于 2013-02-18T18:58:34.400 回答
-2

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

于 2013-02-18T18:49:42.627 回答