繁体   English   中英

在Scala中更改Seq中多个元素的最简单方法

[英]Simplest way to change multiple elements in a Seq in Scala

我有这样的模板序列:

val template = Seq(0,0,0,0,0,0,0,0,0,0)

我有另一个包含索引的序列应被修改,如下所示:

val indices = Seq(1,3,7)

我想以这样的方式修改模板序列:如果元素的索引在索引序列中,则将元素替换为1。

因此输出应如下所示:

(0,1,0,1,0,0,0,1,0,0)

实现此功能的最简单方法是什么?

我自己想了一下:

indices.foldLeft(template)((b, a) => b.updated(a, 1))

解决方案中的foldLeft反复重建序列。 如果序列是一个List并且所有indices指向列表的末尾,则这可能是低效的。

您也可以实现它而无需重复重建集合:

val indexSet = indices.toSet
val result = template.zipWithIndex.map{ case (v, i) =>
  if (indexSet contains i) 1 else v
}

对于List此解决方案将摊销O(n) ,因为检查索引集中是否存在整数将摊销O(1)

也许在某些用例中您的解决方案更可取,但对于一般的Seq来说还不是很清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM