Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala列表列表中元素出现的次数_Scala_List_Functional Programming - Fatal编程技术网

Scala列表列表中元素出现的次数

Scala列表列表中元素出现的次数,scala,list,functional-programming,Scala,List,Functional Programming,为了简单起见,让我们假设我有以下输入: List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C")) 如何能够以这种方式将列表中的元素分组,以便我知道它们在多少个列表中。例如,在mapValues函数的输出之后,为了说明我的意思,前面输入的结果应该如下所示: Map("A" -> 2, "B" -> 3, "C" -> 2) 为了明确我的意思,解释结果的一种方法是说“a”出现在2个子列表中(无论它出

为了简单起见,让我们假设我有以下输入:

List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C"))
如何能够以这种方式将列表中的元素分组,以便我知道它们在多少个列表中。例如,在mapValues函数的输出之后,为了说明我的意思,前面输入的结果应该如下所示:

Map("A" -> 2, "B" -> 3, "C" -> 2)

为了明确我的意思,解释结果的一种方法是说“a”出现在2个子列表中(无论它出现在特定子列表中多少次),“B”出现在3个子列表中,“C”出现在2子列表中。我只是想要一种方法来映射每个元素中有多少不同的子列表

忽略性能,这将起作用:

val list = List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C"))
val elements = list.flatten.distinct
elements.map(el => el -> list.count(_.contains(el))).toMap

不考虑性能,这将起作用:

val list = List(List("A", "A"), List("A", "B"), List("B", "C"), List("B", "C"))
val elements = list.flatten.distinct
elements.map(el => el -> list.count(_.contains(el))).toMap

您也可以使用
折叠
操作来完成此操作

list.flatten.foldLeft(Map.empty[String, Int])((map, word) => map + (word -> (map.getOrElse(word,0) + 1)))
//scala> res2: scala.collection.immutable.Map[String,Int] = Map(A -> 3, B -> 3, C -> 2)

您也可以使用
折叠
操作来完成此操作

list.flatten.foldLeft(Map.empty[String, Int])((map, word) => map + (word -> (map.getOrElse(word,0) + 1)))
//scala> res2: scala.collection.immutable.Map[String,Int] = Map(A -> 3, B -> 3, C -> 2)

@XavierGuihot只计算每个字母出现的次数,而不是询问的内容。@n这就是我要说的,谢谢@XavierGuihot只计算每个字母出现的次数,而不是询问的内容。@n这就是我要说的,谢谢!这非常有效,仍然适合我的解决方案,但是对于所给出的简化,它非常有效,谢谢!这非常有效,仍然适合我的解决方案,但是对于所给出的简化,它非常有效,谢谢!不是预期的结果。这计算了每个“单词”的总出现次数,这不是OP要求的。即使是像我提供的一个简单案例,输出结果也与您的不同,这一事实表明您提出的不是我想要的。无论如何谢谢你!不是预期的结果。这计算了每个“单词”的总出现次数,这不是OP要求的。即使是像我提供的一个简单案例,输出结果也与您的不同,这一事实表明您提出的不是我想要的。无论如何谢谢你!