处理集合并返回平面可迭代

Moh*_*deh 5 loops functional-programming scala yield

val input=Set(Set("a","b"),Set("b","c"))
Run Code Online (Sandbox Code Playgroud)

我要这个:

Map("a"->1,"b"->2,"c"->1)
Run Code Online (Sandbox Code Playgroud)

实现此类功能的最佳功能方法是什么?在嵌套的Iterables中使用yield关键字结果:

output = for(firstlevel<-input) yield for(item<-firstlevel) yield item
Run Code Online (Sandbox Code Playgroud)

Kev*_*ght 8

更新: 纳入建议使用input.toSeq.flatten
而不是input.toSeq flatMap { _.toSeq }

转换为单个值序列...

input.toSeq.flatten
Run Code Online (Sandbox Code Playgroud)

...匹配的组值...

input.toSeq.flatten groupBy { identity }
Run Code Online (Sandbox Code Playgroud)

......算一算

input.toSeq.flatten groupBy { identity } mapValues { _.size }
Run Code Online (Sandbox Code Playgroud)