【问题标题】:Will the Swift 4 array built in method "min()" and "max()" work on an array of strings?Swift 4 数组内置方法“min()”和“max()”是否适用于字符串数组?
【发布时间】:2019-02-07 07:06:03
【问题描述】:

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

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

【问题讨论】:

  • 与其问“它会工作吗?”,不如尝试在操场上运行它?
  • @Sweeper 我确实在操场上运行了它,但没有得到预期的结果。我现在已经编辑了描述。我不确定该功能在什么基础上起作用。如果您对此有任何想法,请告诉我。
  • 你已经有两个很好的答案了,你也可以print(wordArray.sorted(by: <)) 更清楚地知道最小值和最大值是什么

标签: ios arrays swift swift4 min


【解决方案1】:

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

如果您命令+单击单词min,然后按“跳转到定义”,您将看到它在Array 的扩展中声明:

extension Array where Element : Comparable {
    ...

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

因此,min 方法将根据与 < 运算符的比较返回“最小”字符串。

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

这些都评估为真:

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

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

【讨论】:

    【解决方案2】:

    它接受最小值和最大值,但它以字母顺序工作。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-05
      • 2020-11-11
      • 2023-03-31
      • 2019-04-15
      • 2012-12-30
      • 2022-11-14
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多