2012-04-25 76 views
0

我有值的NSArray,我从NSDictionary使用选择与排序拉动具有以下值:NSArray的排序

  1. 约翰
  2. 布赖恩
  3. 亚历 ....
  4. 戴夫

当我使用下面的代码,因为他们正在按照字符串进行比较,列表回来了:

NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingSelector:@selector(compare:)]; 
  1. 约翰
  2. 戴夫
  3. 布赖恩 ...

我怎样才能得到他们都是为了1这些值正确排序,2,3等?我查看了几个不同的排序示例,但一直没有找到像我这样的例子。我还必须提到,我是新手的Objective-C和iOS。任何帮助将不胜感激。

谢谢!

回答

1

我实际上能够找出解决方案。

NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingComparator:sortByNumber]; 

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]; 
}; 

然后,我通过调用排序我的数组:我使用自定义的逻辑来读出每个字符串的前面的数量部分,然后用数字比较它们创建的NSComparisonResult