我有NSArray
的值,我使用选择器从NSDictionary
中提取值,并使用具有以下值的排序:
当我使用下面的代码时,因为它们被比作字符串,所以列表会返回:
NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingSelector:@selector(compare:)];
如何让这些值在1,2,3等的顺序正确排序?我已经看了几个不同的排序示例,但是找不到像我这样的例子。我还必须提到我是Objective-c和iOS的新手。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
我实际上能够找到解决方案。我使用自定义逻辑创建了一个NSComparisonResult
块来读取每个字符串前面的数字部分,然后用数字比较它们:
NSComparisonResult (^sortByNumber)(id, id) = ^(id obj1, id obj2)
{
//Convert items to strings
NSString *s1 = (NSString *)obj1;
NSString *s2 = (NSString *)obj2;
//Find the period and grab the number
NSUInteger periodLoc1 = [s1 rangeOfString:@"."].location;
NSString *number1 = [s1 substringWithRange:NSMakeRange(0, periodLoc1)];
NSUInteger periodLoc2 = [s2 rangeOfString:@"."].location;
NSString *number2 = [s2 substringWithRange:NSMakeRange(0, periodLoc2)];
//Compare the numeric values of the numbers
return [number1 compare:number2 options:NSNumericSearch];
};
然后我通过调用:
对数组进行排序NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingComparator:sortByNumber];