[英]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.