我在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。:“...... min
和max
方法产生数组或数组缓冲区中最小和最大的元素。“
Horstmann,Cay S .. Scala for the Impatient(Kindle Locations 1515-1517)。皮尔逊教育。 Kindle版。
Postface:当书上写着“...产生最小和最大 ...”时,它意味着ASCII比较,而不是所选答案中实现的长度
答案 0 :(得分:3)
在ascii表上,大写字母在小写字母之前,所以Mary < a
并且是最小的元素,你可以在scala REPL中检查这个:
scala> "Mary" < "a"
// res4: Boolean = true
如果您需要按字符串中的字符数进行比较,可以使用minBy
和maxBy
按字符串大小比较字符串:
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