Scala 地图a“;“加权树”;在斯卡拉 问题是:

Scala 地图a“;“加权树”;在斯卡拉 问题是:,scala,dictionary,case-class,Scala,Dictionary,Case Class,根据我已经完成的“加权树”特征,只剩下一个片段,即以下函数: 编写一个函数,接收一个“WeightedTree”作为输入,并返回一个“Map[Char,String]: 对于“WeightedTree”的“Leafs”中的每个字符,我们写下它指向特定字符的方式(向左表示“0”,向右表示“1”),如下所示: 例如: 内(内(叶('a',4),5,叶('c',1)),10,叶('b',5)) -->地图('a'->“00”、'b'->“1”、'c'->“01”) 守则: trait-Weighted

根据我已经完成的“加权树”特征,只剩下一个片段,即以下函数:

编写一个函数,接收一个“WeightedTree”作为输入,并返回一个“Map[Char,String]: 对于“WeightedTree”的“Leafs”中的每个字符,我们写下它指向特定字符的方式(向左表示“0”,向右表示“1”),如下所示:

例如: 内(内(叶('a',4),5,叶('c',1)),10,叶('b',5)) -->地图('a'->“00”、'b'->“1”、'c'->“01”)

守则:
trait-WeightedTree{
val重量:整数
}
case类叶(c:Char,weight:Int)扩展了WeightedTree
案例类内部(左:WeightedTree,右:WeightedTree)扩展了WeightedTree
对象CodeCreator扩展应用程序{
def treeToMap(代码树:WeightedTree):Map[Char,String]=???
}

朋友们帮了我们的忙,我们把这个放在一起,它成功了

def treeToMap(codeTree: WeightedTree): Map[Char, String] = {

  def InnerLoop(innerTree: WeightedTree, path: String): Map[Char, String] = innerTree 
    match {

      case Leaf(ch, c) => Map(ch -> path)
      case Inner(left, _: Int, right) =>

        InnerLoop(left, path + "0") ++ InnerLoop(right, path + "1")
    }

  InnerLoop(codeTree, "")
}

你尝试了什么?你被困在哪里了?这个网站奖励你的努力。向我们展示你认为解决方案可能如何开始,我们将提供建议。亲爱的@jwvh!欢迎并感谢你对这个问题的回答。我和我的一位同学已经在Scala任务上工作了一段时间,这是6项任务中的最后一项,其他所有任务都已经完成了,这件事让我们绞尽脑汁。但读完这一切之后,我想到了一件事:以某种方式匹配案例类,为了测量上述步骤,我们应该有一个“acc”,当我们到达一个字符时,我们在转换“acc”后将其添加到地图中“变成一根绳子?这就是我现在所拥有的一切。试图查看万能的Scaladoc,但我们很快就迷路了。@Daniel,这听起来是个不错的计划(注意,你还需要沿着当前路径下山)。现在剩下的就是写代码了。谢谢@Dima的回答!在Scaladoc中哪里可以找到所需的函数?我应该搜索map还是因为我想把一个char转换成map,我应该检查char函数吗?你特别想要什么函数?要向
地图添加内容
只需执行
theMap+(theChar->thePath)