【问题标题】:How to append head of a list to the tail of same list? [duplicate]如何将列表的头部附加到同一列表的尾部? [复制]
【发布时间】:2019-06-22 20:09:12
【问题描述】:

示例:列表(红色,蓝色,绿色,黑色)。我想将此列表的头部附加到同一个列表的尾部。所以在第一次迭代后,我的列表将是列表(蓝色,绿色,黑色,红色),之后是 List(green,black,red,blue) 等等。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: scala


【解决方案1】:

我想到的第一件事就是照你说的做,将列表的头部附加到尾部

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]...
  • 哦!没想到尾箱。让我更新一下。感谢您指出。
  • @AndreyTyukin 现在应该是安全的了,我想。
  • 当您使用它时,您至少可以使用case h :: t => t :+ h 来避免额外调用tailhead
  • 是的,它does again call .head and .tail。这就是我写:: 而不是+: 的原因。出于某种原因,我非常确定案例类上的模式匹配应该比在一些不相关的对象上调用提取器方法更有效。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多