我已经在python上工作了在python中有一个函数.pop(),它删除列表中的最后一个值并返回该删除的值ex.x = [1,2,3,4] x.pop()将返回4
我想知道这个函数有scala等价吗?
0__*_*0__ 11
Scala 中有许多不同的集合类型,每个类型都有自己的一组支持和/或性能良好的操作.
在Scala中,a List是一个不可变的cons-cell序列,就像在Lisp中一样.获取last元素不是一个很好的优化解决方案(head元素很快).类似地Queue,Stack并且优化用于从一端特别地检索元素和结构的其余部分.如果您的订单相反,您可以使用其中任何一个.
否则,Vector是一个表现良好的通用结构,它既快速head又last通话:
val v = Vector(1, 2, 3, 4)
val init :+ last = v  // uses pattern matching extractor `:+` to get both init and last
哪里last将等同于您的pop操作,并且init删除了最后一个元素的序列(您也可以dropRight(1)按照其他答案中的建议使用).要只检索最后一个元素,请使用v.last.
如果您只想检索最后一个值,可以打电话x.last.但是,这不会从列表中删除最后一个元素,这是不可变的.相反,您可以调用x.init以获取包含x除最后一个元素之外的所有元素的列表- 再次,而不实际更改x.所以:
val lastEl = x.last
val rest = x.init
将为您提供最后一个元素(lastEl),最后一个元素()的列表rest,您还有原始列表(x).
我倾向于使用
val popped :: newList = list
它将列表的第一个元素分配给popped,并将剩余的列表分配给newList