【问题标题】:Scala mkString except the last oneScala mkString 除了最后一个
【发布时间】:2013-12-19 12:08:13
【问题描述】:

我想在 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
}

但是很麻烦。有什么想法吗?

【问题讨论】:

    标签: scala enumerate punctuation


    【解决方案1】:
    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

    【讨论】:

    • 我不知道 init 和 last。即使使用它们在算法上效率不高,但它们在这种情况下很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2020-02-19
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多