ArrayStack移除方法?

发布于 2024-11-04 21:31:13 字数 91 浏览 0 评论 0原文

ArrayStack 类中是否有与 Java 的 remove 功能相同的方法? 或者可以用 Scala 写一个吗?

Is there a method that does the same as Java's remove in the ArrayStack class?
Or is it possible to write one in Scala?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凯凯我们等你回来 2024-11-11 21:31:13

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

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

All Scala's collection types support adding/removing elements at either the start or the end (with varying performance trade-offs), and are only limited in size by certain properties of the JVM - such as the maximum size of pointers.

So if this is the only reason that you're using a Stack, then you've chosen the wrong collection type. Given the requirement to be able to remove elements from the middle of the collection, something like a Vector would be a much better fit.

小姐丶请自重 2024-11-11 21:31:13

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

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


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


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

You can use filterNot(_ == o) to create another stack with any instances of o missing (at least in 2.9), and you can stack.slice(0,n) ++ stack.slice(n+1,stack.length) to create a new stack with in indexed element missing.

But, no, there isn't an exact analog, probably because removing an item at a random position in an array is a low-performance thing to do.


Edit: slice seems buggy to me, actually, in 2.9.0.RC2 (I have filed a bug report with code to fix it, so this will be fixed for 2.9.0.final, presumably). And in 2.8.1, you have to create a new ArrayStack by hand. So I guess the answer for now is a pretty emphatic "no".


Edit: slice has been fixed, so as of 2.9.0.RC4 and later, the slice approach should work.

野却迷人 2024-11-11 21:31:13

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

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 类的不可变版本。

Maybe this could fit your needs:

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

Or there is also immutable version of the Stack class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文