很抱歉,如果这是一个愚蠢的问题,但我目前正在处理两个列表,我想知道从一个列表中弹出最后一个元素并将其添加到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来说相对较新
如果你可以改变你使用不可变列表的方法,你可以实现它
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))
由于您想要操作列表,您可以使用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
的几个选项。现在你可以像newList1
和newList2
那样制作新的列表,或者让它们变成var
。
免责声明:在你的Scala代码中使用
var
s是一个很大的问题,除非你真的确定你为什么要这样做。
以下是两种方法的示例(类似于上述)代码:
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
svar 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)
使用list4
很容易计算init
,但是list3
需要关心,因为list2
可能是空的。这是一种安全的方法:
list3 = list1 ++ list2.takeRight(1)
list4 = list2.init
你可以简单地使用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
你不需要使用可变列表,你可以通过使用像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)
它有何帮助!!