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