ArrayStack删除方法?

时间:2011-05-02 14:06:44

标签: arrays scala stack

是否有一种方法与remove类中的Java ArrayStack相同? 或者是否可以在Scala中编写一个?

3 个答案:

答案 0 :(得分:1)

您可以使用filterNot(_ == o)创建另一个堆栈,其中缺少o的任何实例(至少在2.9中),您可以stack.slice(0,n) ++ stack.slice(n+1,stack.length)创建一个索引元素丢失的新堆栈

但是,不,没有一个确切的类比,可能是因为删除数组中随机位置的项目是一个低性能的事情。


编辑:slice对我来说似乎有些错误,实际上,在2.9.0.RC2中(我已经提交了一个错误报告,其中包含修复它的代码,所以这将修复为2.9.0.final,大概是) 。在2.8.1中,您必须手动创建一个新的ArrayStack。所以我想现在的答案非常强调“不”。


编辑:slice已修复,因此从2.9.0.RC4及更高版本开始,切片方法应该有效。

答案 1 :(得分:1)

所有Scala的集合类型都支持在开始或结束时添加/删除元素(具有不同的性能权衡),并且仅受JVM的某些属性(例如指针的最大大小)的限制。 / p>

因此,如果这是您使用Stack的唯一原因,那么您选择了错误的集合类型。鉴于要求能够从集合的中间删除元素,像Vector这样的东西会更好

答案 2 :(得分:0)

也许这可以满足您的需求:

scala> import collection.mutable.Stack
import collection.mutable.Stack

scala> val s = new Stack[Int]
s: scala.collection.mutable.Stack[Int] = Stack()

scala> s push 1
res0: s.type = Stack(1)

scala> s push 2
res1: s.type = Stack(2, 1)

scala> s push 3
res2: s.type = Stack(3, 2, 1)

scala> s pop
res3: Int = 3

scala> s pop
res4: Int = 2

scala> s pop
res5: Int = 1

或者还有Stack类的不可变版本。