【发布时间】:2014-01-30 20:07:38
【问题描述】:
我有一个文档列表,我想在所有文档中找到 (term -> termCount) 对。这是我的做法:
object termCount extends App {
val docs = List(
List("A", "B", "C", "C"),
List("A", "D"),
List("B", "B", "C"))
val countsMap = docs.flatMap { ts =>
val m = ts.map((_, 1)).groupBy(_._1)
m.map { e => e._1 -> e._2.foldLeft(0)(_ + _._2) }
}.groupBy(_._1)
.map { e => e._1 -> e._2.foldLeft(0)(_ + _._2) }
println(countsMap)
}
输出:
Map(D -> 1, A -> 2, C -> 3, B -> 3)
要将其分解为操作,我正在做的是:
-
生成
(term, 1)的元组val m = ts.map((_, 1)).groupBy(_._1) 计算文档本地 termCount
e => e._1 -> e._2.foldLeft(0)(_ + _._2)生成文档本地
(term -> termCount)条目的Map在所有文档中将此映射展平为元组
(term, termCount)还再次执行
foldLeft以获取全局术语计数
我的问题是,我怎样才能使这段代码更简洁?
【问题讨论】:
标签: scala functional-programming