Swift NSDecimalNumber排序数组

Swift NSDecimalNumber排序数组,swift,sorting,nsarray,nsdecimalnumber,Swift,Sorting,Nsarray,Nsdecimalnumber,NSDecimalNumber有一个有用的比较方法 与其围绕这个比较方法编写一个包装器,然后调用sortedarrayingfunction:context:,我只想直接将NSDecimalNumbercompare方法传递给NSArray的一个排序方法 使用Swift执行此操作的最佳方法是什么?也许您可以尝试以下方法: let num = NSDecimalNumber(integer: 1) let num2 = NSDecimalNumber(integer: 2) let arr: N

NSDecimalNumber
有一个有用的比较方法

与其围绕这个比较方法编写一个包装器,然后调用sortedarrayingfunction:context:,我只想直接将
NSDecimalNumber
compare方法传递给
NSArray的一个排序方法


使用Swift执行此操作的最佳方法是什么?

也许您可以尝试以下方法:

let num = NSDecimalNumber(integer: 1)
let num2 = NSDecimalNumber(integer: 2)

let arr: NSArray = [num, num2]

arr.sort { (num1, num2) -> Bool in
    return num1.compare(num) == .OrderedDescending
}

也许你可以试试这样的东西:

let num = NSDecimalNumber(integer: 1)
let num2 = NSDecimalNumber(integer: 2)

let arr: NSArray = [num, num2]

arr.sort { (num1, num2) -> Bool in
    return num1.compare(num) == .OrderedDescending
}

我想出了两种方法。第一名使用
NSArray
获得荣誉。但是,如果使用
数组
,则更容易一些

let decimalOne = NSDecimalNumber(double: 100.4)
let decimalTwo = NSDecimalNumber(double: 34.1)
let decimalThree = NSDecimalNumber(bool: true)
let array = NSArray(arrayLiteral: decimalOne, decimalTwo, decimalThree)

let sortedArray = array.sort { first, second in
    if let first = first as? NSDecimalNumber, second = second as? NSDecimalNumber {
        // Sorts small to large
        // Use NSComparisonResult.OrderedDescending for large to small sorting
        return first.compare(second) == NSComparisonResult.OrderedAscending
    }

    // Return false since NSArray isn't bound to a specific type
    return false
}

// Using Array
let swiftArray = [decimalOne, decimalTwo, decimalThree]
let sortedSwiftArray = swiftArray.sort { $0.compare($1) ==  NSComparisonResult.OrderedAscending }
由于您在第二个选项中使用了数组,Swift可以推断它是一个
NSDecimalNumber
数组,您不必像在NSArray排序时那样进行类型检查


希望能有所帮助。

我想出了两种方法。第一名使用
NSArray
获得荣誉。但是,如果使用
数组
,则更容易一些

let decimalOne = NSDecimalNumber(double: 100.4)
let decimalTwo = NSDecimalNumber(double: 34.1)
let decimalThree = NSDecimalNumber(bool: true)
let array = NSArray(arrayLiteral: decimalOne, decimalTwo, decimalThree)

let sortedArray = array.sort { first, second in
    if let first = first as? NSDecimalNumber, second = second as? NSDecimalNumber {
        // Sorts small to large
        // Use NSComparisonResult.OrderedDescending for large to small sorting
        return first.compare(second) == NSComparisonResult.OrderedAscending
    }

    // Return false since NSArray isn't bound to a specific type
    return false
}

// Using Array
let swiftArray = [decimalOne, decimalTwo, decimalThree]
let sortedSwiftArray = swiftArray.sort { $0.compare($1) ==  NSComparisonResult.OrderedAscending }
由于您在第二个选项中使用了数组,Swift可以推断它是一个
NSDecimalNumber
数组,您不必像在NSArray排序时那样进行类型检查


希望对您有所帮助。

对于
NSArray
您只需使用
sortedarrayingselector()
并将
compare:
方法作为选择器传递:

let array = NSArray(objects:
        NSDecimalNumber(integer: 30),
        NSDecimalNumber(integer: 20),
        NSDecimalNumber(integer: 10))
let sorted = array.sortedArrayUsingSelector("compare:")
// Swift 2.2 or later:
let sorted = array.sortedArrayUsingSelector(#selector(NSNumber.compare(_:)))

print(sorted) // [10, 20, 30]

对于
NSArray
您只需使用
sortedarray使用选择器()
并将
compare:
方法作为选择器传递:

let array = NSArray(objects:
        NSDecimalNumber(integer: 30),
        NSDecimalNumber(integer: 20),
        NSDecimalNumber(integer: 10))
let sorted = array.sortedArrayUsingSelector("compare:")
// Swift 2.2 or later:
let sorted = array.sortedArrayUsingSelector(#selector(NSNumber.compare(_:)))

print(sorted) // [10, 20, 30]