Scala mkString除了最后一个

时间:2013-12-19 12:08:14

标签: scala enumerate punctuation

我想在scala中执行以下操作:

val l = List("An apple", "a pear", "a grapefruit", "some bread")
... some one-line simple function ...
"An apple, a pear, a grapefruit and some bread"

以这种方式写出最简短的方法是什么?

到目前为止,我最好的尝试是:

def makeEnumeration(l: List[String]): String = {
  var s = ""
  var size = l.length
  for(i <- 0 until size) {
    if(i > 0) {
      if(i != size - 1) { s += ", "
      } else s += " and "
    }
    s += l(i)
  }
  s
}

但它非常麻烦。有什么想法吗?

1 个答案:

答案 0 :(得分:15)

val init = l.view.init

val result =
  if (init.nonEmpty) {
    init.mkString(", ") + " and " + l.last
  } else l.headOption.getOrElse("")

init返回除最后一个元素之外的所有元素,view允许您在不创建集合副本的情况下获取init

对于空集合head(以及last)会抛出异常,因此如果您无法证明您的集合不是headOptionlastOption空。