去除可变列表元素(Removing elements from mutable lists)

2019-07-30 12:40发布

我想选择一个元素,然后从O(1)时间可变列表中删除。 在C ++中我可以做

std::list<Foo> lst;
std::list<Foo>::iterator it = //some choice
//And then, possibly in another function,
lst.erase(it);

我可以在斯卡拉相当于代码,或做我必须做的过滤器或差异?

编辑:为了澄清,我想单独选择和删除。 我想,这样以后可以快速访问,修改,可能已经删除标记的元素。 这将是巨大的,如果我能选择的一个后插入另一元素了。 这就是功能C ++迭代器给。

Answer 1:

如果你想要做的O(1)去除,我认为你唯一的选择是寻找相应的内部链接的列表(有next ),并保持一个参考。

如果使用mutable.DoubleLinkedList事情会变得容易一点:

val li = DoubleLinkedList(1,2,3,4,5,6)
val elem = li.next.next.next // O(< n) until you find what you want
elem.remove() // O(1)

li == DoubleLinkedList(1,2,3,5,6)

但即便如此,你不会有C ++小号可变迭代器接口的完整镜像。

我不知道有这将支持类似的东西,正确的斯卡拉列表。 可替换的建议是使用一个拉链在拉链的位置操作,其还提供了O(1)。



Answer 2:

看看scala.collection.mutable.ArrayBuffer例如(还有其他的,当然,但你并没有说什么收藏你有兴趣,所以我拿起一个):

val a = ArrayBuffer(1, 2, 3, 4)
a -= 3

这是相同的语义你的C ++版本(但它仍然为O(n),就像C ++版本)。



文章来源: Removing elements from mutable lists
标签: scala