使用(多个?)标准对NSArray进行排序 - 少于10个有序错误的年龄

时间:2011-07-24 22:04:50

标签: iphone ios nsarray sorting

我需要对一组年龄组进行排序。面临的挑战是,使用标准NSArray时,任何年龄组都比10-19岁年龄组低10级localizedCaseInsensitiveCompare

具体来说,这是我的未排序数组的示例:

(     " 17-18&#34 ;,     " 13-14&#34 ;,     " 8和Under",     "女性&#34 ;,     "男子34 ;,     " 15-16" )

排序后,我希望看起来像这样:

(     " 8和Under",     " 13-14&#34 ;,     " 15-16&#34 ;,     " 17-18&#34 ;,     "男子34 ;,     "女性" )

但它最终看起来像这样:

(     " 13-14&#34 ;,     " 15-16&#34 ;,     " 17-18&#34 ;,     " 8和Under",     "男子34 ;,     "女性" )

这是使用以下代码:

    NSArray *sortedAgeArray = [ageArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

我喜欢那个"男人"和"女性"得到了最终,这就是我想要的。但有一种聪明/有效的方法来处理不到10岁的年龄?重新格式化我的数据以包含前导零不是一种选择。

我知道我可以编写自定义排序功能,但我试图避免这样做。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用localizedStandardCompare:代替localizedCaseInsensitiveCompare:。这就是Finder使用的,它足够聪明,可以评估" 8"小于" 13"没有前导零。

答案 1 :(得分:0)

您需要添加前导零或编写自定义函数。

或者您可以在前面添加一个完整的“排序键”,用“:”之类的字符分隔。例如,“17:17-18”,“08:8以及”,“W:Women”等。然后使用例如NSString :: componentsSeparatedByString在使用其余字符串之前拆分排序键。介绍