更新序列中的多个值

2024-01-08

要获得更新了一个值的序列,可以使用

seq.updated(index, value)

我想为一系列元素设置一个新值。有这个库函数吗?我目前使用以下功能:

def updatedSlice[A](seq: List[A], ind: Iterable[Int], value: A): List[A] = 
    if (ind.isEmpty) seq
    else updatedSlice(seq.updated(ind.head, value), ind.tail, value)

除了需要编写函数之外,这似乎效率低下,并且也仅适用于列表,而不适用于列表的任意子类Seq and Strings. So,

  • 有没有一种方法可以执行它?
  • 我如何参数化该函数以获取(并返回)某个子类Seq[A]?

据我所知,没有组合器可以直接提供此功能。

For the Seq部分,嗯,它只适用于List因为你正在采取List作为参数。采取一个Seq,返回一个Seq这样你就少了一个问题了。

此外,您的实现会抛出一个IndexOutOfBounds异常如果ind包含大于或等于的索引seq length.

这是一个替代实现(它使用Set对于 O(1)contains)

def updatedAtIndexes[A](seq: Seq[A], ind: Set[Int], value: A): Seq[A] = seq.zipWithIndex.map {
  case (el, i) if ind.contains(i) => value
  case (el, _) => el
}

Example

updatedAtIndexes(List(1, 2, 3, 4, 5), Set(0, 2), 42) // List(42, 2, 42, 4)

您甚至可以使用一个简单的隐式类使其更漂亮:

implicit class MyPimpedSeq[A](seq: Seq[A]) {
  def updatedAtIndexes(ind: Set[Int], value: A): Seq[A] = seq.zipWithIndex.map {
    case (el, i) if ind.contains(i) => value
    case (el, _) => el
  }
}

Examples

List(1, 2, 3, 4).updatedAtIndexes(Set(0, 2), 42) // List(42, 2, 42, 4)
Vector(1, 2, 3).updatedAtIndexes(Set(1, 2, 3), 42) // Vector(1, 42, 42)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新序列中的多个值 的相关文章

  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • Spark-1.6.1 上的 DMLC 的 XGBoost-4j

    我正在尝试在 Spark 1 6 1 上使用 DMLC 的 XGBoost 实现 我能够使用 XGBoost 训练我的数据 但在预测方面面临困难 我实际上想以在 Apache Spark mllib 库中完成的方式进行预测 这有助于计算训练
  • 在 Scala 中扩展函数1

    在几个例子中 我看到一个对象或一个类扩展Function1 E g object Cash extends CashProduct gt String in Scala 的隐藏功能 https stackoverflow com quest
  • 函数式 Scala 中的选择排序

    我正在学习 Scala 编程 并编写了选择排序算法的快速实现 然而 由于我对函数式编程还不太了解 所以在转换为更 Scala 风格时遇到了困难 对于 Scala 程序员来说 如何使用 Lists 和 vals 来做到这一点 而不是回到我的命
  • 在这种情况下,scala 的类型检查是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Start writing your ScalaFiddle code here sealed trait DSL A def run
  • 使用 mapWithState Spark Streaming 过滤部分重复项

    我们有一个DStream 比如 val ssc new StreamingContext sc Seconds 1 val kS KafkaUtils createDirectStream String TMapRecord ssc Pre
  • 使用spark-sql从oracle加载数据时如何增加默认精度和小数位数

    尝试从 oracle 表加载数据 其中我有几列保存浮点值 有时它最多保存 DecimalType 40 20 即点后 20 位数字 目前 当我使用加载其列时 var local ora df DataFrameReader ora df l
  • DWR 如何转换传入数据并避免类型擦除

    我想请求一个集合的项目类 某种特定的反映 但是关于类型擦除似乎是不可能的 而且关于我在堆栈上读到的一些主题也是如此 有一些解决方法 here https stackoverflow com questions 8452893 avoidin
  • 将 Scala Future 转变为 CompletableFuture

    我的项目中有一个 Akka 层 它返回Scala Future 而接收 Future 的部分是 Java 风格的 团队中的人不了解 Scala 他们宁愿使用CompletableFuture因为他们更了解 Java 8 API 有没有什么好
  • 引用Scala中内部类的类型

    下面的代码尝试模仿DSL 的多态嵌入 http www daimi au dk ko papers gpce50 hofer pdf 而不是给出行为Inner 它被编码在useInner其封闭类的方法 我添加了enclosing方法 以便用
  • 无法证明与路径相关类型的等价性

    为什么最后一个summon编译失败 我该怎么做才能让它编译 import java time LocalDateTime LocalTime trait Circular T type Parent given localTimeCircu
  • 基于值的类混乱

    我正在寻求一些澄清基于值的类的定义 https docs oracle com javase 8 docs api java lang doc files ValueBased html 我无法想象 最后一个要点 6 应该如何与第一个要点一
  • Play 框架:异步与同步性能

    我有以下代码 def sync Action val t0 System nanoTime Thread sleep 100 val t1 System nanoTime Ok Elapsed time t1 t0 1000000 0 ms
  • 如何插入UUID的值?

    我在 Play Framework 2 3 支持的 postgresql 9 4 中使用 anorm 2 4 给出一个这样的模型 case class EmailQueue id UUID send from String send to
  • 强制类型差异

    在 Scala 中 我可以在编译时强制执行类型相等 例如 case class Foo A B a A b B implicit ev A B scala gt Foo 1 2 res3 Foo Int Int Foo 1 2 scala
  • 如何将 csv 文件读取为键值对的映射

    我的 csv 文件中有数据 例如 value key A Name B Name C Name 24 Age 25 Age 20 Age M Gender F Gender 我想解析它以生成以下地图 Map Name gt List A B
  • collect_list() 是否保持行的相对顺序?

    想象一下我有以下 DataFrame df id featureName featureValue id1 a 3 id1 b 4 id2 a 2 id2 c 5 id3 d 9 想象一下我运行 df groupBy id agg coll
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 对 HList 进行协变过滤

    我打算以协变方式过滤 HList 我也想包含子类 所以协变滤波器Foo应捕获以下元素Foo也Bar 我已经构建了这个例子来尝试 lt lt 看看它是否做了我想做的事情 http scastie org 6465 http scastie o
  • scala:抽象类实例化?

    我怎么会实例化一个抽象类呢 abstract class A val a Int val a new A val a 3 或者是隐式创建了一些具体的类 那些大括号之后是做什么用的new A mean 这样 您就隐式扩展了A 你所做的是语法糖

随机推荐

  • django 本地时间模板过滤器不起作用

    我使用 django 1 10 来显示日期时间 日期时间存储在 mongodb 中 并且始终是没有时区信息的 UTC 因此我需要根据运行 django 的机器的时区显示日期时间 首先 在settings py中添加它们 TIME ZONE
  • 编译错误:“版本高于引用的程序集”

    我的视图页面出现错误 因此我将 Visual Studio 更新为 mvc4 尽管我正在使用 mvc3 我第一次使用 NuGet 更新 但它不起作用 所以我通过独立 MVC4 更新 所以它起作用了 但是当我尝试运行 MVC3 项目时 出现以
  • 使用 Metal 的旧设备上的内存使用量持续上升

    I use Metal and CADisplayLink活过滤CIImage并将其渲染成MTKView Starting display link displayLink CADisplayLink target self selecto
  • 如何更改 base64 格式的 svg img 的颜色?

    我有一个 Svg img 其中包含base64格式并尝试更改其颜色 有人知道如何执行此操作吗 我发现了一些关于
  • 是否可以将列表类型转换为生成器而不进行迭代?

    我知道可以将生成器转换为 低级 列表 例如list i for i in xrange 10 但是是否可以做相反的事情without首先迭代列表 例如 i for i in range 10 Edit 删除了这个词cast为了清楚地说明我想
  • 程序化组件上的 Vue 反应式 props

    给定一个组件 Vue component my comp props input watch input function 以下的编程方法是什么
  • 在swift4中解析Json

    你好 我尝试解码 Json 结果 ID 80 时间 09 00 00 地位 status 0 kirpeja id 74 name Natalja image natalija255 png duration 00 20 00 status
  • 当我在 php 中尝试 Solr 时出现问题

    我在 PHP 中运行示例时遇到问题 代码如下
  • 永久删除 Beaglebone Black 服务

    如何从 BeagleBone Black Debian wheezy 发行版中永久删除 cloud9 bonescript gateone 等 我可以使用以下命令禁用它们 systemctl disable cloud9 service s
  • 按预期顺序运行依赖和独立测试方法

    我想按顺序执行测试方法 我在 testng xml 中使用了类 并将保留顺序设置为 true
  • 等待两个 Observable 完成

    我想在两个 Observables 返回值后调用一个方法 我做了一些搜索 看起来像forkJoin是我想要的 但我无法让它发挥作用 我知道这两个 Observables 都返回值 因为我在组件中的其他地方单独使用每个 Observables
  • 使用 id 访问 div,无需 getElementById 和 jQuery [重复]

    这个问题在这里已经有答案了 我相信 JS 中访问具有 id 的元素的标准方法是使用 getElementById 如果人们喜欢使用 jQuery 那么他们可能会使用他们的选择器 但最近我遇到了一个非常简单的代码示例 如下所示 HTML di
  • JQuery 自动完成:如何处理修改?

    我有自动完成功能 但如何处理修改 当用户修改原始选择时会发生什么 我有一个自动完成功能 当选择列表时 会填写其他字段 如果用户选择列表 然后尝试将其修改为新的内容 与我们数据库中的任何内容都不匹配 则其他字段需要清除 另一种提问方式 我如何
  • C# PCL 从文件读取

    因此 我正在编写一个面向 NET 4 5 Windows 8 和 Windows Phone 8 的可移植类库 我正在尝试从作为构建内容的项目一部分的文本文件中进行读取 我看到 StreamReader 在 PCL 中可用 但在给定文件路径
  • 如何使用 Linux 命令找到我的 shell 版本?

    我想了解使用 Linux 命令的 shell 版本 我尝试了以下命令 但它显示了我所在的 shell 的类型 Command echo SHELL Result bin bash 这将做到这一点 SHELL version 就我而言 输出是
  • 我可以使用 CSS 更改 svg 路径的填充颜色吗?

    我有以下代码 span span
  • 在 macOS 应用程序中以编程方式创建和定位 NSButton? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何以编程方式在 macOS Coc
  • 为什么 requestHeaders 未定义?

    我正在制作一个记录请求标头的 Chrome 扩展 在我的background js文件中我有这个代码 chrome webRequest onSendHeaders addListener function res res requestH
  • 反应选择下拉菜单在模式内打开

    我有一个自定义模式 里面有 2 个反应选择组件 模态主体已准备好自动滚动 以防内容超出其大小 但反应选择组件下拉列表会在模态内部打开并出现溢出 这正是我不想要的 没有溢出 它工作正常 我正在使用 CSS 模块 div this props
  • 更新序列中的多个值

    要获得更新了一个值的序列 可以使用 seq updated index value 我想为一系列元素设置一个新值 有这个库函数吗 我目前使用以下功能 def updatedSlice A seq List A ind Iterable In