【问题标题】:Get total length of all lists inside a map of tuples获取元组映射中所有列表的总长度
【发布时间】:2021-09-22 11:26:15
【问题描述】:

我正在处理一个 Scala 项目,我有一个 Map[Long, Tuple2[Boolean, List[Int]]] 类型的 Map。

我需要将地图内所有列表中的元素总数分配给一个变量。

我目前有一个可行的解决方案,但是,我想要一个更有效的解决方案。我相信我听人说过你可以使用名为flatMap 的东西。所以本质上,我想知道是否有不需要循环的解决方案,我可以说添加地图中所有列表的长度。 p>

我的解决方案如下:

for((k, v) <- myMap) total = total + v._2.length

【问题讨论】:

    标签: list scala dictionary flat


    【解决方案1】:

    没有办法让你的代码更高效,问题是O(N)定义。

    但是,如果Map 非常大,您可以并行化代码。您也可以使用除 List 之外的其他数据类型,它不需要自行迭代来计算其长度。

    最后,提出另一种摆脱可变性的方法。

    val total =
      myMap
        .valuesIterator
        .map(_._2.length)
        .sum
    

    【讨论】:

      【解决方案2】:

      就效率而言,您的执行将始终是您的地图中的O(n)

      如果你想使用更具声明性的方法,可以使用foldLeft

      val total = myMap.foldLeft(0) {
        case (total, (_, list)) => total + list.length
      }
      

      foldLeft 将种子作为它的第一个参数列表,我们可以将其初始化为0。然后我们遍历每个列表,将它们相加并返回中间结果。当我们到达键值对的末尾时,最后累积的元素将作为结果返回。

      【讨论】:

      • 其实是O(keys*average_list_length),而不仅仅是O(keys)
      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多