我的NSArray包含100,110,91,98和87,所有NSStrings。
我想按顺序排列它们:87,91,98,100,110。
相反,它们显示为100,110,87,91,98。
遗憾的是,无法使用所有整数而不是字符串启动数组。任何人都有任何想法如何判断数组是否只包含字符串中的数字,也许使用for循环?然后我可以将它们全部转换为数组中的整数并按此方式进行排序。或者也许有一种我想念的简单方法?
如果有人有任何想法,请告诉我。
答案 0 :(得分:6)
您可以使用NSString比较函数的NSNumericSearch
选项以数字方式对字符串进行排序。要使用NSArray执行此操作,您需要编写一个块或函数来调用compare:options:
方法。
NSArray *theStrings; // Contains strings, some of which are numbers
NSArray *theSortedStrings = [theStrings sortedArrayUsingComparator:^(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
如果字符串中有一个数字,也会按数字排序,即"abcd89"
将出现在"abcd123"
之前。
答案 1 :(得分:1)
有a whole mess of options for sorting an array;这不是问题。
排序方法总是按顺序放置对象。订单取决于对象或您自己。
所以你需要做的是以下之一:
第一门是一招半。 NSString和其他类集群不允许您继承实现;你可以创建自己的字符串类,但是你基本上需要从头做任何事情(或者在字符串中包装一个字符串并将除compare:
之外的每条消息转发给它)。
门2号更容易。几乎每一个排序方法都采用你实现的块或函数;无论哪种方式,块/函数从数组中获取两个对象,比较它们,并返回它们所在的顺序。
您的块/函数应将a compare:options:
message发送到它收到的两个字符串之一,并传递the NSNumericSearch
option,然后返回结果。
NSArray询问字符串的比较方式,并询问字符串如何在数字上进行比较,然后数组将按数字顺序对其对象进行排序。