字符串的 ArrayBuffer - 最小值

ArrayBuffer of Strings - Min

我在 scalatest 规范中有以下代码:

val arr = ArrayBuffer("Mary", "had", "a", "little", "lamb")
arr.max shouldEqual "little"
arr.min shouldEqual "a"

第二个 失败 ,说:

"[Mary]" did not equal "[a]"

为什么这不是return"a"

根据 Scala for the Impatient,第 2 版:“...minmax 方法产生最小和最大的元素数组或数组缓冲区。"

Horstmann, Cay S.. Scala for the Impatient(Kindle Locations 1515-1517)。培生教育。 Kindle 版。

后记:当书中说“...产生 最小最大...”时,它表示 ASCII 比较,而不是在所选答案中实现的长度。

在 ascii table 上,大写字母排在小写字母之前,因此 Mary < a 是最小的元素,您可以在 scala REPL 中查看:

scala> "Mary" < "a"
// res4: Boolean = true

如果需要按字符串中的字符数进行比较,可以使用minBymaxBy按大小比较字符串:

import scala.collection.mutable.ArrayBuffer

val arr = ArrayBuffer("Mary", "had", "a", "little", "lamb")
// arr: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Mary, had, a, little, lamb)

arr.minBy(_.size)
// res5: String = a

arr.maxBy(_.size)
// res6: String = little