2

如果我有一系列具有重复值的映射和如下所示的子映射:

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 将其转换为如下所示的整理结构的方法是什么:

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))
      )
    )
  )
)
4

1 回答 1

4

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

更新

实际的转换算法必须(恕我直言)将嵌套映射转换回关键字符串。然后构建 Trie 就像将所有元素放入put提供的 gist 中一样简单。所以我认为在程序中早一点使用这个结构会更好。

于 2013-09-07T19:54:05.787 回答