我努力寻找简单功能的转化方法
val ints = List(1, 2, 3, 4, 5) into List(1, 3, 6, 10, 15)
怎么做?
答案 0 :(得分:10)
此操作称为prefix sum, cumulative sum, or inclusive scan,更通用的高阶函数通常称为table(groupname,var1)
。 Scala提供scan
作为其集合库的一部分:
scan
答案 1 :(得分:0)
您可以使用foldLeft
,如下所示:
scala> List(1,2,3,4,5).foldLeft(List.empty[Int]) { case (acc, next) =>
| acc :+ next + acc.lastOption.getOrElse(0)
| }
res6: List[Int] = List(1, 3, 6, 10, 15)
在部分功能(acc, next)
中,acc
是当前累积的列表,以List.empty[Int]
开头,next
是提供的列表中的下一个值,以{开头{1}}。
答案 2 :(得分:0)
ints.foldLeft(List[Int]())((acc,elem)=>elem+acc.headOption.getOrElse(0)::acc)
答案 3 :(得分:0)
哦,继续,另一种给猫皮肤涂抹的方法:
ints.drop(1).foldLeft(List(ints.head))((acc,elem)=>elem+acc.head::acc).reverse
答案 4 :(得分:0)
感谢李回答我将其修改为
ints.tail.scan(ints.head)(_ + _)
稍长一点,但它将第一个元素视为初始状态。