如何从scala中的列表末尾弹出一个元素,并将其添加到另一个列表的末尾?

问题描述 投票:0回答:5

很抱歉,如果这是一个愚蠢的问题,但我目前正在处理两个列表,我想知道从一个列表中弹出最后一个元素并将其添加到Scala中另一个列表末尾的最佳方法是什么?我在Scala中找不到Python的pop等价物,所以我有点困惑

例如:

list1: List1[Int] = List(4,5,6)

list2: List2[Int] = List(5,7,8)

从那里我想将List 2的最后一个元素添加到List1,然后返回

list3: List1[Int] = List(4,5,6,8)

list4: List2[Int] = List(5,7)

任何帮助都会受到赞赏,对Scala来说相对较新

scala list pop buffered
5个回答
1
投票

如果你可以改变你使用不可变列表的方法,你可以实现它

val list1 = List(4,5,6)
val list2 = List(5,7,8)
val list3 = list1 :+ list2.last
val list4 = list2.dropRight(1)
println(list3, list4)

产量

(List(4, 5, 6, 8),List(5, 7))

1
投票

由于您想要操作列表,您可以使用Scala的mutable集合,这是非常不推荐的。但只是为了给它一个味道,你可以这样做:

  val list1 = mutable.ListBuffer(4,5,6)
  val list2 = mutable.ListBuffer(5,7,8)

  val dropped = list2.remove(list2.size - 1)

  println(list2)
  list1.append(dropped) // OR you can use => 
  // list1 += dropped
  println(list1)

更新:没有制作List mutable的几个选项。现在你可以像newList1newList2那样制作新的列表,或者让它们变成var

免责声明:在你的Scala代码中使用vars是一个很大的问题,除非你真的确定你为什么要这样做。

以下是两种方法的示例(类似于上述)代码:

  1. newList1newList2
 val list1 = List(4,5,6)
 val list2 = List(5,7,8)

 val (newList2, dropped) = list2.splitAt(list2.size - 1)

 val newList1 = list1 ++ dropped

 println(newList2)
 println(newList1)
  1. 随着vars
var list1 = List(4,5,6)
var list2 = List(5,7,8)

val result = list2.splitAt(list2.size - 1)
val dropped = result._2
list2 = result._1
list1 = list1 ++ dropped

println(list2)
println(list1)

1
投票

使用list4很容易计算init,但是list3需要关心,因为list2可能是空的。这是一种安全的方法:

list3 = list1 ++ list2.takeRight(1)
list4 = list2.init

0
投票

你可以简单地使用init(与tail相反)和last(与head相反)scala list的方法。

val list1 = List(1,2,3)
val list2 = List(4,5,6)

val newList1 = list1 ++ List(list2.last)   // return 1,2,3,6
val newList2 = list2.init   // return 4,5

0
投票

你不需要使用可变列表,你可以通过使用像last和drop这样的简单操作来做到这一点。

val list1 = List(4,5,6)

val list2= List(5,7,8)

你能做的是:

//val lastElem = list1.last // can cause an error if list is empty

can use takeRight instead

val lastElem = list1.takeRight(1)

print(list1 :+ lastElem, list2.drop(1)) // output, List(4,5,6,8), List(5, 7)

您也可以将这些值保存到新的val中

val appenedList = list1:+lastElem
val popedList = list2.drop(1)

它有何帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.