加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala删除(就地)满足条件的ListBuffer的所有元素

发布时间:2020-12-16 09:18:01 所属栏目:安全 来源:网络整理
导读:我有一个ListBuffer我想删除所有满足一定条件的元素. 我可以迭代它并删除每个元素.但是Scala对于突破你正在迭代的列表说什么呢?它会工作,还是会删除错误的元素/不返回所有元素? (快速尝试REPL表示是的,它会搞砸) 我可以重复调用find,然后删除找到的元素,直
我有一个ListBuffer我想删除所有满足一定条件的元素.

我可以迭代它并删除每个元素.但是Scala对于突破你正在迭代的列表说什么呢?它会工作,还是会删除错误的元素/不返回所有元素? (快速尝试REPL表示是的,它会搞砸)

我可以重复调用find,然后删除找到的元素,直到我找不到,但这听起来效率不高.

.filter会给我一个没有元素的新的ListBuffer,但是我想要这样做.

这个

def --= (xs: TraversableOnce[A]) : ListBuffer.this.type
Removes all elements produced by an iterator from this list buffer.

看起来很有希望,但我看不出如何在这里使用它

我该怎么办?

解决方法

你不能有效地这样做,不幸的是. – =(xs:TraversableOnce [A])的实现是(扩展形式;实际代码更紧凑)

xs foreach (x => this -= x) ; this

这与一次一个(即,它是O(n * m))一样低效,其中n是原始列表的长度,m是要删除的项目的数量).

一般来说,可变集合并不具有完整和强大的一组方法作为不可变的集合. (也就是说,他们拥有所有精美的方法用于不可变的集合,但是相对较少的集合).

所以除非你删除很少的对象,否则你可能会更好的过滤列表来创建一个新对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读