【发布时间】:2019-06-22 20:09:12
【问题描述】:
示例:列表(红色,蓝色,绿色,黑色)。我想将此列表的头部附加到同一个列表的尾部。所以在第一次迭代后,我的列表将是列表(蓝色,绿色,黑色,红色),之后是 List(green,black,red,blue) 等等。
【问题讨论】:
-
到目前为止你尝试了什么?
标签: scala
示例:列表(红色,蓝色,绿色,黑色)。我想将此列表的头部附加到同一个列表的尾部。所以在第一次迭代后,我的列表将是列表(蓝色,绿色,黑色,红色),之后是 List(green,black,red,blue) 等等。
【问题讨论】:
标签: scala
我想到的第一件事就是照你说的做,将列表的头部附加到尾部
val a = List("red","blue","green","black")
val b = a.tail :+ a.head
或者让它更安全:
//val a = Nil
val a = List("red","blue","green","black")
//val a = List("red")
val b = a match {
case Nil => Nil
case h :: t => t :+ h
}
println(b)
【讨论】:
Nil 崩溃的方式与第一个完全相同,因为Nil.tail 引发异常:java.lang.UnsupportedOperationException: tail of empty list。它甚至无法正确编译,因为它会生成 List[Any]...
case h :: t => t :+ h 来避免额外调用tail 和head。
.head and .tail。这就是我写:: 而不是+: 的原因。出于某种原因,我非常确定案例类上的模式匹配应该比在一些不相关的对象上调用提取器方法更有效。