很抱歉,如果这是一个愚蠢的问题,但是我目前正在处理两个列表,我想知道从一个列表中弹出最后一个元素并将其添加到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来说还很新
答案 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
的一些选择。现在,您可以像newList1
和newList2
一样制作新列表,也可以将它们设为var
变量。
免责声明:Scala代码中包含
var
是一个很大的问题,除非您 真的确定为什么要这么做。
这是这两种方法的示例代码(与上述类似):
newList1
和newList2
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)
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)
它如何帮助!