方法 "min()" 和 "max()" 中内置的 Swift 4 数组是否适用于字符串数组?

Will the Swift 4 array built in method "min()" and "max()" work on an array of strings?

下面是 playground 代码,它接受一个字符串并根据空格拆分它并创建一个数组。该函数在什么基础上计算字符串数组中的最小值和最大值。是字符串长度吗?我期待基于字符串长度的结果。如果这不是预期的行为,请纠正我。

let testString = "swim switch swill swift"
let wordArray = testString.components(separatedBy: " ")
let first = wordArray.min()!

它接受最小值和最大值,但它按字母顺序

工作
import UIKit
let testString = "s ab dfc rtgf"
let wordArray = testString.components(separatedBy: " ")
let first = wordArray.min()! // prints ab
let second = wordArray.max()! // prints s

它不仅仅基于字符串长度。

如果你命令+单击单词min然后按"Jump to Definition",你会看到它在Array的扩展中声明:

extension Array where Element : Comparable {
    ...

这表明它比较元素的方式可能是使用 <>,因为这些是 Comparable 所需的运算符。

因此,min 方法将根据与 < 运算符的比较 return "smallest" 字符串。

< 运算符如何处理字符串?

这些都计算为真:

"s" < "ss"
"a" < "b"
"ab" < "b"

这表明它首先按字母顺序比较字母,然后按长度比较。换句话说,它像字典一样工作(就像在实际的字典中包含单词及其含义,而不是数据结构)。 min 方法将 return 字典中第一个出现的单词。