How to let the sortedArrayUsingSelector using integer to sort instead of String?

前端 未结 5 617
心在旅途
心在旅途 2020-12-02 02:10

I have some data like this :

1, 111, 2, 333, 45, 67, 322, 4445

NSArray *array = [[myData allKeys]sortedArrayUsingSelector: @selector(compare:)];
         


        
5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-02 02:50

    David's answer did the trick for me. For what it's worth, I want to share the Swift 1.0 version of the same answer.

    extension NSString {
        func psuedoNumericCompare(otherString: NSString) -> NSComparisonResult {
            var left: NSString = self
            var right: NSString = otherString
            var leftNumber: Int = self.integerValue
            var rightNumber: Int = otherString.integerValue
    
            var leftScanner: NSScanner = NSScanner(string: left)
            var rightScanner: NSScanner = NSScanner(string: right)
    
            if leftScanner.scanInteger(&leftNumber) && rightScanner.scanInteger(&rightNumber) {
                if leftNumber < rightNumber {
                    return NSComparisonResult.OrderedAscending
                }
                if leftNumber > rightNumber {
                    return NSComparisonResult.OrderedDescending
                }
    
                left = left.substringFromIndex(leftScanner.scanLocation)
                right = right.substringFromIndex(rightScanner.scanLocation)
            }
            return left.caseInsensitiveCompare(right)
        }
    }
    

提交回复
热议问题