计算列表中的数字在Scala中的元组间隔列表中出现的次数

Aru*_*yam 1 scala tuples accumulator

说我有一个元组列表:

 val ranges= List((1,4), (5,8), (9,10))
Run Code Online (Sandbox Code Playgroud)

和一个数字列表

val nums = List(2,2,3,7,8,9)
Run Code Online (Sandbox Code Playgroud)

我想从范围中的元组制作一个映射到nums中给定数字落入该元组间隔的次数.

输出:

Map ((1,4) -> 3, (5,8) -> 2, (9,10) -> 1)
Run Code Online (Sandbox Code Playgroud)

什么是Scala中最好的方法

我一直在尝试使用for循环并保持一个计数器,但我不尽如人意.任何帮助将非常感谢.

最好的祝福

slo*_*ouc 5

像这样的东西:

val ranges = List((1, 4), (5, 8), (9, 10))
val nums = List(2, 2, 3, 7, 8, 9)

val occurences = ranges.map { case (l, r) => nums.count((l to r) contains _) }
val map = (ranges zip occurences).toMap

println(map) // Map((1,4) -> 3, (5,8) -> 2, (9,10) -> 1)
Run Code Online (Sandbox Code Playgroud)

基本上它首先计算出现次数,[3,2,1].从那里可以很容易地构建地图.它计算出现次数的方式是:

  • 浏览范围列表
  • 将每个范围转换为该范围的出现次数,如下所示:
    • 列表nums中包含多少个数字?

编辑:不知道为什么这个答案会被低估,也许我不知何故误解了这个问题.

  • 我不知道是谁贬低了你,这是一个很好的答案,而且非常可靠. (3认同)