gpt4 book ai didi

scala - 如何从 ListBuffer 中删除多个索引(快速)?

转载 作者:行者123 更新时间:2023-12-02 22:43:31 24 4
gpt4 key购买 nike

Scala 中有没有一种好方法可以从 ListBuffer 中删除多个索引(快速)?

示例:

val indicesToDelete = List(4, 1)
val buffer = ListBuffer(a, b, c, d, e)

结果:

ListBuffer(b, c, e)

我找不到可以完成这项工作的预定义函数。

可以对索引进行排序并删除以最高索引开头的元素等,因此不会有任何复杂化。但排序需要O(n * log n)。有没有更快的方法(也许是我错过的预定义的方法)?

更新 1: 应删除现有 ListBuffer 对象中的元素,不应创建新的 ListBuffer 对象。

最佳答案

您必须使用 zipWithIndex,就像其他帖子已经做的那样,因为否则索引会发生变化,您可能会意外删除错误的项目。但我会使用 collect,而不是 foldLeftfilter + map,在这种情况下,其作用与 filter + map,但只需一步即可。

buffer.zipWithIndex.collect { case (x,i) if !indicesToDelete.contains(i) => x }

这也可以写成

for {
(x,i) <- buffer.zipWithIndex
if !indicesToDelete.contains(i)
} yield x

关于scala - 如何从 ListBuffer 中删除多个索引(快速)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com