假设我有一个元组列表:
val ranges= List((1,4), (5,8), (9,10))
和一个数字列表
val nums = List(2,2,3,7,8,9)
我想制作一个从范围内的元组到 nums 中的给定数字落入该元组区间的次数的映射。
输出:
Map ((1,4) -> 3, (5,8) -> 2, (9,10) -> 1)
在 Scala 中最好的方法是什么
我一直在尝试使用 for 循环并保留一个计数器,但我做不到。
最佳答案
像这样:
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)
基本上它首先计算出现的次数,[3, 2, 1]。从那里很容易构建 map 。它计算出现次数的方式是:
- 浏览范围列表
- 将每个范围转换为该范围的出现次数,这样做是这样的:
- 列表
nums
中有多少个数字包含在该范围内?
- 列表
关于scala - 计算列表中的数字在 Scala 中的元组间隔列表中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255882/