字符串的ArrayBuffer - Min

时间:2017-11-15 15:46:32

标签: scala sorting arraybuffer

我在scalatest规范中包含以下代码:

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

第二个shouldEqual上哪个失败,说:

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

为什么这不会返回"a"

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

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

Postface:当书上写着“...产生最小最大 ...”时,它意味着ASCII比较,而不是所选答案中实现的长度

1 个答案:

答案 0 :(得分:3)

在ascii表上,大写字母在小写字母之前,所以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