我有一个这样的模板序列:
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)
实现此功能的最简单方法是什么?
答案 0 :(得分:3)
自己想象:
startkey=[2013]&endkey=[2013]
答案 1 :(得分:2)
解决方案中的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
来说,它并不那么明确。