gpt4 book ai didi

从 Boolean 列表到求和 Int 列表的 Scala 匹配

转载 作者:行者123 更新时间:2023-12-01 15:02:53 25 4
gpt4 key购买 nike

我有一个关于 scala/spark 的列表匹配的一般性问题。假设我有一个 bool 值列表,其形式为:

List(true, false, false ,true, true)

我希望将这个 bool 值列表转换成类似的东西:

List(1, 1, 1, 2, 3)

这样每有一个true,List就加1,每有一个false,就输出之前的结果。我认为有一些非常有效的方法可以在不循环的情况下执行此操作,但现在想不出任何方法..

最佳答案

您可以使用 scanLeft为此:

List(true, false, false, true, true).scanLeft(0) { case (sum, next) =>
if(next) sum + 1 else sum
}.tail

res45: List[Int] = List(1, 1, 1, 2, 3)

scanLeft帮助您生成一系列部分和,这基本上就是您在这里所拥有的。在 case (sum, next) , sum表示当前累计值,next表示 List 中的下一个元素.所以我们检查 next为真,如果是则加一,否则返回当前总和。 scanLeft 内返回的每个元素添加到最后 List .

请注意,我必须用 0 为它播种,最后我只取了 tail 就放弃了的 List .否则我会有List(0, 1, 1, 1, 2, 3) .

关于从 Boolean 列表到求和 Int 列表的 Scala 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28902006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com