对 NSDecimalNumber 的 NSArray 进行排序
Sort NSArray of NSDecimalNumber
NSDecimalNumber
有一个有用的 compare: 方法。
然后围绕这个比较方法编写一个包装器然后调用 sortedArrayUsingFunction:context:,我只想直接将 NSDecimalNumber
比较方法传递给 NSArray's
sorted< 之一。 ..> 方法。
使用 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
}
我想到了两个办法。第一个荣誉使用NSArray
。但是,如果您使用 Array
会更容易一些。
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 { [=10=].compare() == NSComparisonResult.OrderedAscending }
由于您在第二个选项中使用了数组 Swift 可以推断它是一个 NSDecimalNumber
的数组并且您不必像在NSArray 的排序。
希望对您有所帮助。
对于 NSArray
你可以简单地使用 sortedArrayUsingSelector()
并将 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]
NSDecimalNumber
有一个有用的 compare: 方法。
然后围绕这个比较方法编写一个包装器然后调用 sortedArrayUsingFunction:context:,我只想直接将 NSDecimalNumber
比较方法传递给 NSArray's
sorted< 之一。 ..> 方法。
使用 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
}
我想到了两个办法。第一个荣誉使用NSArray
。但是,如果您使用 Array
会更容易一些。
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 { [=10=].compare() == NSComparisonResult.OrderedAscending }
由于您在第二个选项中使用了数组 Swift 可以推断它是一个 NSDecimalNumber
的数组并且您不必像在NSArray 的排序。
希望对您有所帮助。
对于 NSArray
你可以简单地使用 sortedArrayUsingSelector()
并将 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]