swift - 排序方法如何在 Swift 中反向工作?

标签 swift

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]


func backward(_ s1: String, _ s2: String) -> Bool {
     return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]

因为参数被传递给向后函数,所以很难理解发生了什么。这段代码是如何工作的?

最佳答案

sorted 方法发送到一个数组,成对地获取该数组的元素并决定哪个元素先出现。通过将其应用于数组的所有元素,它最终得到一个排序数组。

但是“先来”是什么意思?它可以代表任何!事实上,可以决定它的含义。要告诉 sorted 方法“先到”是什么意思,您将一个函数作为参数传递给它,该函数接受两个元素并返回一个 bool 值,说明第一个元素是否“先到”。

嗯,backward就是这样一个函数:

func backward(_ s1: String, _ s2: String) -> Bool {
    return s1 > s2
}

backward 函数表示:第一个参数相对于第二个参数“先出现”,仅当第二个参数较大时。

现在我们将 backward 函数交给 sorted 方法:

var reversedNames = names.sorted(by: backward)

请注意,backward 没有对 backward 函数的调用;它是 backward 函数的名称。我们将函数自身 交给sorted,这样它就知道“先来”是什么意思。

所以 sorted 最终返回一个数组,其中每个较大的元素相对于每个较小的元素“排在第一位”。对于字符串,“较大”表示“在字母表中靠后”,因此我们得到 ["Ewa", "Daniella", "Chris", "Barry", "Alex"]

关于swift - 排序方法如何在 Swift 中反向工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799465/

相关文章:

ios - UITabBarController canBecomeFirstResponder 方法未被调用

swift - Swift 中来自服务器的日期

swift - 使用 SwiftJSON 将 Alamofire 结果 JSON 加载到 TableView 中

swift - fatal error : unexpectedly found nil while unwrapping an Optional value in swift Json parsing

ios - UICollectionView 的弹性 header

ios - 找不到 MBProgressHUD/MBProgressHUD.h' 文件

swift - 具有核心数据的 TableViewController 中的搜索栏

ios - CoreData fetch() 返回无序的对象

Swift View Controller 向下转换

swift - 枚举和闭包组合