将列表添加到Scala中的另一个列表的惯用方法

Bas*_*ato 0 scala

对不起新手的问题,但我在Scala找不到这个的简写.

val s1 = List(8, 9, 10)
val s2 = List(7, 6, 5)
val s12 = s2.foldLeft(s1)((acc, x) => x :: acc)
assert(s12 === List(5, 6, 7, 8, 9, 10))
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个操作符来达到同样的效果?

muc*_*aho 6

您可以反转第二个列表并将结果添加到第一个列表中

val s12 = s2.reverse ::: s1
Run Code Online (Sandbox Code Playgroud)

有关可用方法的其他文档,请参阅scala.collection.immutable.ListAPIdocs

例如 :::

在此列表前添加给定列表的元素.

顺便:::使用这样的方式(中缀符号 - 没有点)是右关联的(这意味着该方法将在正确的对象上调用 - s1在这种情况下).
此外,当:::使用点表示法调用时,它将在点的左侧对象上调用,因此在这种情况下s2.reverse.:::(s1)将导致List(8, 9, 10, 5, 6, 7)

  • @BasilTomato如果你在谈论一小部分有限的项目,我每次都会选择美学而非性能.如果它是一个大的或无限数量的项目,你真的担心性能,你可以选择一个更复杂的数据结构,如`Vector`并使用它的`reverseIterator`按你想要的顺序访问每个项目. (2认同)