如何在Scala中的地图列表中收集项目

时间:2013-09-07 19:38:04

标签: scala map collate

如果我有一系列具有重复值的地图和子地图,如下所示:

val from = Seq(
    Map("aaa" -> Map("bbb" -> Map("ccc" -> List(1)))),
    Map("aaa" -> Map("bbb" -> Map("ddd" -> List("a","b")))),
    Map("aaa" -> Map("bbb" -> Map("eee" -> List(99,100)))),
    Map("aaa" -> Map("bbb" -> Map("ccc" -> List(2,3)))),
    Map("aaa" -> Map("bbb" -> Map("ddd" -> List("c","d")))),
    Map("aaa" -> Map("bbb" -> Map("eee" -> List(101,102)))),
    Map("aaa" -> Map("bbb" -> Map("ccc" -> Map("ddd" -> Map("eee" -> Map("fff" -> Map("ggg" -> List(true, false)))
    ))))))

将Scala转换为如下所示的整理结构的Scala方法是什么:

val to = Seq(
    Map("aaa" ->
      Map("bbb" -> Map(
        "ccc" -> List(1, 2, 3),
        "ddd" -> List("a", "b", "c", "d"),
        "eee" -> List(99, 100, 101, 102),
        "fff" -> 
            Map("ggg" -> List(true, false))
      )
    )
  )
)

1 个答案:

答案 0 :(得分:4)

此结构称为Trie或“前缀树”。 github(https://gist.github.com/timcowlishaw/1363652)有一个要点,它实现了这个概念。

<强>更新

实际转换算法必然(IMHO)将嵌套映射转换回键字符串。然后构建Trie就像在提供的要点中放置put的所有元素一样简单。所以我认为最好在程序中稍早使用该结构。