关于Swift中sorted(by:)
函数背后的逻辑,我有点困惑(它是Swift 2中的sort()
)。以下面的代码为例......返回类型bool
如何在数字的反向排序中产生?
let aBunchOfNumbers = [1,2,3,4,5,6,7,8,9,10]
let reverseSortClosure: (Int, Int) -> Bool = {
(numberOne: Int, numberTwo: Int) -> Bool in
if numberOne < numberTwo {
return true
}
return false
}
aBunchOfNumbers.sorted(by: reverseSortClosure)
(Qazxswpoi)
来自文档:sort(_:)
was renamed sorted(by:)
since Swift 3
https://docs.swift.org/swift-book/LanguageGuide/Closures.html#ID95方法接受一个闭包,它接受与数组内容相同类型的两个参数,并返回一个Bool值,以说明一旦值被排序后第一个值是出现在第二个值之前还是之后。如果第一个值应出现在第二个值之前,则排序闭包需要返回true,否则返回false。
也就是说,sorted(by:)
接受的函数的类型类看起来像sorted()
,其中(T, T) -> Bool
是要排序的inout数组的类型。如果函数的第一个值应出现在第二个值之前,则该函数返回true。 Swift使用此函数来命令传入的列表。
在Swift 2中,sort()方法需要用作数组的扩展。 T
如果你想扭转它,你必须使用aBunchOfNumbers.sort(reverseSortClosure)
。
>
您还可以按如下方式简化代码:
let aBunchOfNumbers = [1,2,3,4,5,6,7,8,9,10]
let reverseSortClosure: (Int, Int) -> Bool = {
(lhs, rhs) -> Bool in
return lhs > rhs
}
let reversed = aBunchOfNumbers.sort(reverseSortClosure) // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
sort方法是对数组进行排序,因此该方法需要知道第一个,第二个,第三个等的值。首先出现的值是true,而第二个值是false。这就是sort方法返回bool的原因。此外,您的代码非常复杂,并不是很好。这样做的速度相同,速度要快得多。
let reversed = aBunchOfNumbers2.sort(>)
如果你一开始没有关闭,不要担心。它们很难理解,语法对于swift来说有点独特。
希望这可以帮助
也许你正在学习闭包,但你在这里不需要。 let aBunchOfNumbers = [1,2,3,4,5,6,7,8,9,10]
aBunchOfNumbers.sort({
$0 > $1 })
函数接受第二个参数,该参数是比较两个值的函数 - 如果第一个参数出现在第二个参数之前,函数将返回sort()
。
在你的情况下,数组包含true
- 已经有一个非常好的功能来比较Int
- 它是Ints
。像这样使用它:
>