我需要对一组年龄组进行排序。面临的挑战是,使用标准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岁的年龄?重新格式化我的数据以包含前导零不是一种选择。
我知道我可以编写自定义排序功能,但我试图避免这样做。
谢谢!
答案 0 :(得分:2)
您可以使用localizedStandardCompare:
代替localizedCaseInsensitiveCompare:
。这就是Finder使用的,它足够聪明,可以评估" 8"小于" 13"没有前导零。
答案 1 :(得分:0)
您需要添加前导零或编写自定义函数。
或者您可以在前面添加一个完整的“排序键”,用“:”之类的字符分隔。例如,“17:17-18”,“08:8以及”,“W:Women”等。然后使用例如NSString :: componentsSeparatedByString在使用其余字符串之前拆分排序键。介绍