所以我有一个0和1的列表,我想找到每个元素的计数并将其输出到列表中。我可以想到使用函数的递归方法,但是是否有任何辅助函数可以帮助转换此函数?
我相信groupBy可能有用,但是似乎将所有元素分组到一个分区或另一个分区中,而不是按照我想要的方式分组。
我想要一个数字计数列表,直到每次从0到1以及从1到0的过渡为止。即,如果我们有0,0,0,..好的,我们计算了3个零,所以记住3,那么我们就有1 1,1,1,所以我们算了4个1,所以我们记得4,到目前为止,我们有一个[3,4 ...]的列表,依此类推
这可能有点复杂。但是我会去的。
scala> implicit class ListHelper[A](ls:List[A]) {
def partitionBy(f: (A, A) => Boolean) = if (ls.isEmpty) List.empty[Int]
else (ls zip (ls.head :: ls)).foldLeft(List.empty[Int]){
case (Nil, _) => List(1)
case (x :: xs, (a, b)) => if (a == b) (x + 1) :: xs else 1 :: x :: xs
}.reverse
}
defined class ListHelper
scala> List(0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1).partitionBy(_ == _)
res27: List[Int] = List(3, 4, 2, 2)
这是基于clojure函数 partition-by
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句