组列表[(List [Char,Int],String)]到List [(List [(Char,Int)],List [String])]

时间:2012-10-30 13:58:27

标签: scala

我有List[(List[(Char,Int)],String)]这样的

val words = List((List(('a',1),('e',1),('t',1)),"ate"),
                 (List(('a',1),('e',1),('t',1)),"eat"),
                 (List(('a',1),('e',1),('t',1)),"tea"))

表示每个单词中每个字符的出现次数。

现在我想按出现次数对此列表进行分组,以生成一个包含此项目的列表

val grouped = List((List(('a',1),('e',1),('t',1)),(List("ate","eat","tea"))))

我尝试了words groupBy(i => i._1),但其输出是

(List((a,1), (e,1), (t,1)),List((List((a,1), (e,1), (t,1)),ate), (List((a,1), (e,1), (t,1)),eat), (List((a,1), (e,1), (t,1)),tea)))

注意:我既不使用for expression也不使用for loop,我喜欢使用高阶函数,例如mapflatMap

有人能给我一个暗示吗?

1 个答案:

答案 0 :(得分:4)

words.groupBy(_._1).mapValues(_.map(_._2).toList.sorted).toList