【问题标题】:How do I calculate the product of the occurrence of elements in 2 lists?如何计算 2 个列表中元素出现的乘积?
【发布时间】:2020-03-09 07:13:44
【问题描述】:

我创建了一个计算列表中元素出现次数的函数,如果我传递字符串

"d b d b d"

进入函数,然后返回

(b -> 2, d -> 3)

现在我想做的是创建一个新函数,它接受两个 List[String] 参数

def foo(a: List[String], b: List[String]) : Int = {

}

假设我通过了

List("a", "b", "b", "c", "d") 
occurrences of this list = (a -> 1, b -> 2, c -> 1, d -> 1)

List("d", "b", "d", "b", "d")
occurrences of this list = (b -> 2, d -> 3)

进入这个函数,它将计算每个列表中每个元素的出现次数,然后计算列表之间每次出现的乘积。因此,通过这两个列表的预期答案是 7:

1*0 + 2*2 + 1*0 + 1*3 = 7
 a     b     c     d 

我该怎么做?

【问题讨论】:

    标签: scala list function methods


    【解决方案1】:

    你可以这样做:

      def count(string: String): Map[String, Int] =
        string.split(" ").groupBy(identity).mapValues(_.length)
    
      def multiply(m1: Map[String, Int], m2: Map[String, Int]): Map[String, Int] = {
        val allKeys = m1.keySet.union(m2.keySet)
        allKeys.map(key => key -> m1.getOrElse(key, 0) * m2.getOrElse(key, 0)).toMap
      }
    
      val freq1 = count("a b b c d")
      val freq2 = count("d b d b d")
    
      val multiplied = multiply(freq1, freq2)
      val sum = multiplied.values.sum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2020-09-26
      • 2017-03-02
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多