假设我在Scala中有一个数字列表。
val numbers = List(15,30,110,140,170,210)
计算每个bin的整数个数的最佳方法是什么。
因此,对于上面的列表,结果将是以下地图:
0 -> 2
100 -> 3
200 -> 1
答案 0 :(得分:6)
scala> List(1,2,3,101,330,302).groupBy(i => i/100)
.map {case (i,l) => (i*100,l.length)}
res1: scala.collection.immutable.Map[Int,Int] = Map(100 -> 1, 300 -> 2, 0 -> 3)
答案 1 :(得分:1)
从Scala 2.13
开始,您可以使用groupMapReduce
方法,该方法(如其名称所示)等效于groupBy
,后跟map
和{{1 }}运用价值:
reduce
此:
// val items = List(1, 2, 3, 101, 330, 302)
items.groupMapReduce(_ / 100 * 100)(_ => 1)(_ + _)
// Map(0 -> 3, 100 -> 1, 300 -> 2)
项通过其关联的“ bin”(group
例如_ / 100 * 100
)(组 MapReduce的组部分)
330 / 100 * 100 = 300
将值分组为1(map
)(映射组 Map Reduce)
_ => 1
)中的值 reduce
进行求和(减少groupMap Reduce 的一部分)。
这是one-pass version可以翻译的内容:
_ + _