scala ArrayBuffer 删除带有谓词的所有元素

2024-03-13

Scala 在过滤不可变序列方面非常优雅:

var l = List(1,2,3,4,5,6)
l = l.filter(_%2==1)

但是如何使用像 ArrayBuffer 这样的可变集合来做到这一点呢? 我发现的只是删除单个元素或切片,或者从另一个序列中删除元素,但没有删除谓词给出的元素。

编辑: 我希望找到类似的东西:

trait Removable[A] extends Buffer[A]{ 
  def removeIf(p: A => Boolean){
    var it1 = 0
    var it2 = 0

    while(it2 < length){
      if( p( this(it2) ) ){
        it2 += 1;
      } 
      else {
        this(it1) = this(it2)
        it1 += 1;
        it2 += 1;
      }
    }

    trimEnd(it2-it1)
  }
}

它以线性时间进行过滤,并且可以混合到任何缓冲区中,但只有 ArrayBuffer 有意义,在 ListBuffers 上它会很慢,因为索引确实需要线性时间。


我的猜测是,通过构建新的缓冲区来过滤会更有效,因此您通常只使用filter并使用它的结果。否则,您可以编写自己的就地过滤方法:

def filterInPlace[A](b: collection.mutable.Buffer[A])(fun: A => Boolean): Unit = {
  var sz = b.size
  var i = 0; while(i < sz) {
    if (fun(b(i))) {
      i += 1
    } else {
      sz -= 1
      b.remove(i)
    }
  }
}

val b = collection.mutable.ArrayBuffer((1 to 6): _ *)
filterInPlace(b)(_ % 2 == 1)
println(b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala ArrayBuffer 删除带有谓词的所有元素 的相关文章

  • scala 中的抽象类型

    我正在经历抽象类型Scala我收到一个错误 我正在尝试的例子 scala gt class Food abstract class Animal type SuitableFood lt Food def eat food Suitable
  • 如何在 AWS S3 中保存和使用 Spark History Server 日志

    我想在AWS S3中记录和查看Spark历史服务器的事件日志 以下是spark defaults conf中记录的属性 spark hadoop fs s3a impl org apache hadoop fs s3a S3AFileSys
  • 如何更改 SBT 命令内的设置?

    我想要一个命令publish snapshot这将运行publish修改后的任务version设置 该设置将在执行命令时计算 我想出了如何获取当前值version内部命令 以及Project runTask task scope 似乎是调用
  • 在 Scala 中生成数字的质因数

    如何在 Scala 中生成整数的因子 这是我的看法1 def factorize x Int List Int def foo x Int a Int List Int if a gt Math pow x 0 5 return List
  • 为什么“private val”和“private Final val”不同?

    我曾经以为private val and private final val是一样的 直到我看到 Scala Reference 中的第 4 1 节 常量值定义的形式为 final val x e 其中 e 是常量表达式 第 6 24 节
  • Scala中如何将DataFrame转换为RDD?

    有人可以分享一下如何转换dataframe to an RDD Simply val rows RDD Row df rdd
  • 如何从 Scala repl 中取消导入隐式?

    是否可以从 repl 中取消导入隐式内容 说我做这样的事情 scala gt import scala math BigInt import scala math BigInt scala gt implicits 2 implicit m
  • Scala 重载构造函数和 super

    我无法理解如何在 Java 上开发类似于以下的 Scala 代码 public abstract class A protected A protected A int a public abstract class B protected
  • 如何在 Akka Stream 中记录流量?

    我有一个带有单个流 图的 Akka Stream 应用程序 我想测量源头的流量并每 5 秒记录一次 例如 在过去 5 秒内收到 3 条消息 我尝试过 someOtherFlow groupedWithin Integer MAX VALUE
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • 《使用 Apache Flink 进行流处理》如何从 IntelliJ 运行书籍代码?

    如中所述这个帖子 https stackoverflow com questions 61043860 how to run first example of apache flink我无法成功运行 使用 Apache Flink 进行流处
  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • 新式(“内联”)宏需要 scala.meta

    我刚刚更新到 scala meta 2 0 0 M1 和最新的 scala 2 12 3 现在宏不再编译 我所做的唯一更改是将元版本从 1 8 0 更改为 2 0 0 M1 错误 新式 内联 宏需要 scala meta 有谁知道是否有快速
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • 如何从 SparkSQL DataFrame 中的 MapType 列获取键和值

    我的镶木地板文件中有数据 该文件有 2 个字段 object id String and alpha Map lt gt 它被读入 SparkSQL 中的数据帧 其架构如下所示 scala gt alphaDF printSchema ro
  • 如何发现 Scala 远程 Actor 已死亡?

    在 Scala 中 当另一个 远程 actor 终止时 可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link 方法来通知一个 actor 在这种情况下 当远程参与者通过调用 exit 结束其工作时 第一个参与者
  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN

随机推荐

  • id 的值相同(浮点数)

    据我所知 Python 中的一切都是对象id 应该 我对吗 为每个对象返回不同的数字 就我而言 id 1 回报4298178968 id 2 回报4298178944但我对所有浮点类型都得到相同的值 id 1 1 回报4298189032
  • 集合的 EF Code First 映射

    我首先使用 EF 4 1 RC 代码 我在连接表 Friends 中有一个使用复合 PK 的多对多关系 我们明确需要一个单独的 Friends 类 不要问 来代表我们的联结表 我们的目标是能够控制用户实体的删除过程 请在阅读其余部分之前先阅
  • 如何在 R 中操作(聚合)数据?

    我有一个数据集 如下所示 df lt tribble id price number of book 1 10 3 1 5 1 2 7 4 2 6 2 2 3 4 3 4 1 4 5 1 4 6 1 5 1 2 5 9 3 正如您在数据集中
  • CData部分未完成问题

    当我对下面的 XML 使用 DOMDocument loadXML 时 出现错误 Warning DOMDocument loadXML domdocument loadxml CData section not finished http
  • 在 Chrome 中的密码字段上使用 setCustomValidity 时出现不可读的文本

    如果我在 html5 表单密码字段上使用 setCustomValidity 设置错误消息 它会像密码字段本身一样弹出为气泡或星星 从而导致不可读的消息 这是一个 jsfiddle 来演示我的意思 http jsfiddle net Lcf
  • 在序言中返回列表

    我想问一个关于返回列表的问题 事实 团队 团队名称 总监 国籍 总体目标 team milan allegri italy 8 5 team inter benitez italy 7 6 team barcelona guardiola
  • 在WHMCS中将专用IP显示到viewinvoice.tpl和invoicepdf.tpl中?

    您好 堆栈我有一个问题不知道如何解决 我想显示客户订单中的专用 IP 如下所示 我做了一个简短的检查 发现需要完成查看发票 tpl and 发票pdf tpl文件 我发现专用IP被存储到tbl主机数据库中的表 我找到了这段代码 php cl
  • 在C#中修改XML现有内容

    目的 我计划使用 XmlTextWriter 创建一个 XML 文件 并使用 XmlNode SelectSingleNode node ChildNode InnerText someting 等修改 更新一些现有内容 我使用 XmlTe
  • 如何将 autodie 与非内置函数一起使用?

    autodie 文档暗示 除了默认情况下可以处理的内置函数之外 还可以将它用于其他功能 但没有明确的示例如何在其中执行此操作 具体来说 我想将它用于成像器模块 其中的很多函数和方法都可能会失败 如果这不意味着我的代码会到处都是 我更愿意or
  • 在 PHP 中按多维数组分组并用逗号连接结果(不会创建不必要的逗号)

    我需要将二维数组中的行按两列分组 然后在每个组中 我需要用逗号连接另一列的值 请注意 在第三行中 诊断值为空 data id gt 1 begin gt 01 01 diagnostic gt a id gt 1 begin gt 01 0
  • 使用 getScript 加载 jQuery UI

    我正在尝试构建一个需要人员加载 jQuery 和 jQuery UI 的小部件 加载 jQuery 不是问题 但在标题中添加 ui 却不起作用 而且我不断收到此错误 b is undefined Break on this error fu
  • 集合被修改,枚举操作可能无法执行

    我有多线程应用程序 但收到此错误 Exception Text System InvalidOperationException Collection was modified enumeration operation may not e
  • Bash 将文件移动到同名文件夹[重复]

    这个问题在这里已经有答案了 如果我将其发布在错误的位置 我提前道歉 我对脚本编写非常陌生 更不用说 stackoverflow 了 我有许多以以下结尾的文件 conf与多个同名文件夹 不带后缀 位于同一目录中 conf扩大 例如 我的目录如
  • Codesign 返回未知错误 -1=ffffffffffffffff

    我尝试对 iOS 应用程序进行代码签名 这些是我遵循的步骤 security create keychain p password KEYCHAIN security set keychain settings u t 300 KEYCHA
  • 图像在幻灯片上旋转

    我正在使用引导轮播插件来幻灯片显示照片 问题是有些图像旋转了 90 度 有什么办法可以解决这个问题吗 这是 HTML div class container div class row div class col md 8 col md o
  • 如何检查任何类型的变量是否是数组

    我尝试将 swift 协议数组转换为任何数组 但失败了 protocol SomeProtocol class class SomeClass NSObject SomeProtocol let protocolArray SomeProt
  • 如何为“插入”表单中的字段传递默认值?

    如何为 插入 表单中的字段传递默认值 我正在使用 Meteor 的软件包 Autoform Collections2 和 Simple Schema 我的流程是 用户在页面列表中选择某个值 然后 打开 插入 我希望使用用户在上一步中选择的值
  • 如何用c++语言中的tensorflow.so和c_api.h加载图?

    我找不到任何有关如何加载图表的示例tensorflow so and c api h在C 中 我读了c api h 但是 那ReadBinaryProto功能不在其中 如何在没有ReadBinaryProto功能 如果您使用 C 您可能需要
  • 为派生类专门化 std::hash 在 gcc 中有效,而不是 clang

    我正在努力专攻std hash对于派生类 迄今为止最好的方法是基于这个答案 https stackoverflow com a 31213703 620382 include
  • scala ArrayBuffer 删除带有谓词的所有元素

    Scala 在过滤不可变序列方面非常优雅 var l List 1 2 3 4 5 6 l l filter 2 1 但是如何使用像 ArrayBuffer 这样的可变集合来做到这一点呢 我发现的只是删除单个元素或切片 或者从另一个序列中删