我在一行中给出了一系列字段长度,并希望将其从行的开头转换为偏移量。容易用累加器做程序,想知道什么是功能方式。快速解决方案是:
scala> val positions = Array(9,10,15,4)
positions: Array[Int] = Array(9, 10, 15, 4)
scala> val offsets = positions.zipWithIndex.map(t => positions.take(t._2).sum)
offsets: Array[Int] = Array(0, 9, 19, 34)
这显然是次优的,因为它从头开始计算每个元素的偏移量。有更好的想法吗?
答案 0 :(得分:4)
这个怎么样:
positions.scanLeft(0){ _+_ }
如果你想删除最后一个元素:
positions.scanLeft(0){ _+_ }.init