Swift中排序(by :)的解释

时间:2016-01-28 02:03:14

标签: swift sorting

我对Swift中DateTime dateEnd = SqlDateTime.MaxValue.Value; 函数背后的逻辑感到有点困惑(在Swift 2中它是sorted(by:))。以下面的代码为例......返回类型sort()如何在数字的反向排序中产生?

bool

4 个答案:

答案 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
}