您如何在scala中从列表末尾弹出元素,然后将其添加到另一个列表末尾?

时间:2019-04-09 03:07:13

标签: scala list pop buffered

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

例如:

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来说还很新

5 个答案:

答案 0 :(得分:1)

由于要操作列表,因此可以使用mutable个Scala集合,强烈建议不要使用。但是只是为了给它加味,这就是你怎么做的:

  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代码中包含var是一个很大的问题,除非您   真的确定为什么要这么做。

这是这两种方法的示例代码(与上述类似):

  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. var
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 :(得分: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))

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您可以简单地使用scala init的{​​{1}}(与tail相反)和last(与head相反)方法。 / p>

list

答案 4 :(得分: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 appenedList = list1:+lastElem
val popedList = list2.drop(1)

它如何帮助!