【问题标题】:Scala number of occurences of element in list of listsScala列表列表中元素的出现次数
【发布时间】:2018-10-08 12:17:54
【问题描述】:

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

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 个中。我只是想要一个方法映射每个单独元素存在多少个不同的子列表。

【问题讨论】:

  • @XavierGuihot 只计算每个字母出现的次数,而不是询问的内容。
  • @nmat 这就是我要说的,谢谢!

标签: scala list functional-programming


【解决方案1】:

忽略性能,这会起作用:

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

【讨论】:

  • 这很好用,仍然可以适应我的解决方案,但是对于给出的简化,它可以创造奇迹,谢谢!
【解决方案2】:

你也可以使用fold操作来点赞

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)

【讨论】:

  • 不是想要的结果。这计算了每个“单词”的总出现次数,这不是 OP 要求的。
  • 即使对于像我提供的输出这样的简单案例,输出也与您的不同,这表明您提出的不是我想要的。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2018-11-20
  • 2011-08-10
  • 2015-01-13
  • 2012-08-03
  • 2020-01-26
相关资源
最近更新 更多