Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala mkString,最后一个除外_Scala_Enumerate_Punctuation - Fatal编程技术网

Scala mkString,最后一个除外

Scala mkString,最后一个除外,scala,enumerate,punctuation,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

我想在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
}
def makeEnumeration(l:List[String]):String={
var s=“”
变量大小=l.长度
对于(i 0){
如果(i!=大小-1){s+=“,”
}其他s+=“和”
}
s+=l(i)
}
s
}
但它相当麻烦。有什么想法吗

val init = l.view.init

val result =
  if (init.nonEmpty) {
    init.mkString(", ") + " and " + l.last
  } else l.headOption.getOrElse("")
init
返回除最后一个元素之外的所有元素,
view
允许您获取
init
,而无需创建集合的副本


对于空集合,
head
(和
last
)将引发异常,因此如果无法证明集合不是空的,则应使用
headOption
lastOption

我不知道init和last。即使使用它们在算法上不高效,它们在这种情况下也是有用的。