Swift中排序(by :)的解释

问题描述 投票:0回答:4

关于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)
swift sorting
4个回答
1
投票

(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使用此函数来命令传入的列表。


1
投票

在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]

0
投票

sort方法是对数组进行排序,因此该方法需要知道第一个,第二个,第三个等的值。首先出现的值是true,而第二个值是false。这就是sort方法返回bool的原因。此外,您的代码非常复杂,并不是很好。这样做的速度相同,速度要快得多。

let reversed = aBunchOfNumbers2.sort(>)

如果你一开始没有关闭,不要担心。它们很难理解,语法对于swift来说有点独特。

希望这可以帮助


0
投票

也许你正在学习闭包,但你在这里不需要。 let aBunchOfNumbers = [1,2,3,4,5,6,7,8,9,10] aBunchOfNumbers.sort({ $0 > $1 }) 函数接受第二个参数,该参数是比较两个值的函数 - 如果第一个参数出现在第二个参数之前,函数将返回sort()

在你的情况下,数组包含true - 已经有一个非常好的功能来比较Int - 它是Ints。像这样使用它:

>
© www.soinside.com 2019 - 2024. All rights reserved.