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/