Я пытаюсь выяснить, как получить размер (число «уровней») пользовательской древовидной структуры данных, определенной следующим образом:
case class PrefixTreeImpl[K, +V](value: Option[V], prefixTree: Map[K, PrefixTree[K, V]]) extends PrefixTree[K, V]
Как вы можете видеть, она реализует * Интерфейс 1004 * (черта на самом деле), который имеет метод size()
среди других:
def size: Int
Я пытаюсь реализовать его с помощью метода foldLeft () Scala, но я не совсем понимаю, как он работает с такими сложными структурами данных. До сих пор я придумал это и застрял:
override def size: Int = {
if (prefixTree.isEmpty) 0
else
prefixTree.foldLeft(0) {(z, Map[K, PrefixTree[K, V]]()) => z + 1}
}
Очевидно, что он не компилируется, но я еще не мог придумать что-то еще.
Способ работы DS:
in: scala>val tree2 = tree1.put(List("one", "two"), 12)
out: PrefixTreeImpl(None,Map(one -> PrefixTreeImpl(None,Map(two -> PrefixTreeImpl(Some(12),Map(tree -> PrefixTreeImpl(Some(123),Map())))))))