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

标签 scala tuples accumulator

假设我有一个元组列表:

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/

相关文章:

garbage-collection - 如何确保未使用的累加器的垃圾收集?

scala - 将 [String,Object] 从数据库(或键值存储)映射到无形可扩展记录

scala - 存在类型的惯用替换

c++ - 在 C++11 中替换元组中的类型

pattern-matching - 匹配具有多个可能值的元组

accumulator - HQ9+ 中的 'accumulator' 是什么?

haskell - 无可辩驳的模式不会在递归中泄漏内存,但为什么呢?

scala - 在Play框架中使用Elastic4s创建Elasticsearch索引时出现无效的Json错误

Scala 泛型子类型

c++ - std::is_same 和 std::get 在一起