2, d -> 3) 现在我想做的是创建一个新函数,它接受两个参数 List[-6ren">
gpt4 book ai didi

scala - 如何计算两个列表中元素出现次数的乘积?

转载 作者:行者123 更新时间:2023-12-04 18:02:19 25 4
gpt4 key购买 nike

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

"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

我该怎么做?

最佳答案

你可以这样做:

  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

关于scala - 如何计算两个列表中元素出现次数的乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com