方法 "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 字典中第一个出现的单词。
下面是 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 字典中第一个出现的单词。