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 删除带有谓词的所有元素 的相关文章

  • e:B, f:(B,A)=>B) : B 是什么意思

    我对这意味着什么感到困惑 我理解柯里化 但我似乎无法完全阅读代码 def foldLeft A B xs List A e B f B A gt B B 只是几个建议 顺便说一句 里面没有柯里化 def foldLeft A B xs Li
  • 如何在 AWS S3 中保存和使用 Spark History Server 日志

    我想在AWS S3中记录和查看Spark历史服务器的事件日志 以下是spark defaults conf中记录的属性 spark hadoop fs s3a impl org apache hadoop fs s3a S3AFileSys
  • Scala Stream 按需要调用(惰性)与按名称调用

    所以我知道按需要呼叫只是按名称呼叫的记忆版本 在 Martin Odersky 在 Coursera 上的 FP 课程中 第 7 3 讲 惰性评估 中 他提到如果 Streams 是使用按名称调用来实现的 那么它可能会导致计算复杂性的激增
  • 我在 Scala 中将资源放在哪里?

    在学习使用 Scala 和 JavaFX 时 我在 a 中遇到了以下代码ProScalaFX 示例 https github com jpsacha ProScalaFX val resource getClass getResource
  • Scala 泛型函数值(匿名函数)- 缺少参数类型(错误)

    我是 Scala 新手 Scala 代码运行器版本 2 7 7 final 我真的不明白为什么当我们使用高阶函数时它要求调用者提供参数类型 在下面的示例中 我有一个独立的对象 Util 具有一个功能 但在Main块中 调用者必须将参数类型传
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • Scala 组合器解析器 - 区分数字字符串和变量字符串

    我正在做 Cay Horstmann 的组合器解析器练习 我想知道区分代表数字的字符串和代表匹配语句中变量的字符串的最佳方法 def factor Parser ExprTree wholeNumber expr ident case a
  • Scala:在运行时获取 mixin 接口

    我需要在运行时从给定的类获取所有接口 全部加载在类加载器中 例如 如果一个类是这样声明的 trait B trait C trait D class A extends B with C with D 我想在运行时获取这些信息 A 取决于
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • Scala 相当于 Java 的 Number

    我正在尝试为数值域类型构建类型层次结构 例如AYear is an Int 这是一个Number a Percentage is a Double 这是一个Number等等 我需要层次结构以便我可以调用toInt or toDouble关于
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 如何在 JavaScript 中将 ArrayBuffer 与 DataView 结合使用

    我见过的关于 ArrayBuffer 的唯一真正的教程来自HTML5摇滚 https www html5rocks com en tutorials webgl typed arrays 但我特别想知道如何操作各个字节 例如 这个carto
  • Scala 如何忽略 Java 的检查异常?

    例如如果调用 JavaThread sleep这会抛出一个已检查的InterruptedException来自 Scala 源文件 然后不需要将调用包含在 Scala 中try catch Scala 如何删除将调用包围在 a 中的规则tr
  • 如何在 Scala 中打印任何内容的列表?

    目前我有一个打印整数的方法 def printList args List Int Unit args foreach println 我如何修改它 使其足够灵活 可以打印任何内容的列表 您不需要专用的方法 所需的功能已经在集合类中 pri
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • 在 Scala 和 SBT 中调试较长的编译时间

    在我的 Scala SBT 项目中 我有一个文件需要 5 分钟才能编译 所有其他的都可以在几秒钟内编译 这使得开发非常痛苦 我确信我滥用了一些 Scala 构造 但我不知道如何调试它 如何在 Scala 中调试较长的编译时间 我正在使用 S

随机推荐

  • 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 这样的可变集合来做到这一点呢 我发现的只是删除单个元素或切片 或者从另一个序列中删