如何使用scala构造函数进行映射

时间:2017-03-11 19:24:36

标签: scala functional-programming type-mismatch

我正在开发Scala Coursera课程中的函数式编程;我正在做关于霍夫曼编码树的练习。

这是代表霍夫曼树的代码

sealed abstract class CodeTree
case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree
case class Leaf(char: Char, weight: Int) extends CodeTree

我们假设它实现了一个带List[(Char,Int)]并返回List[Leaf]

的函数

这是我的代码:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map(
    (c, i) => Leaf(c, i)
)

但是我收到了这个错误

enter image description here

任何人都可以向我解释这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

这是您正在寻找的语法:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map {
    case (c, i) => Leaf(c, i)
}

由于您要映射元组列表,如果要在迭代时解压缩它们,则需要提供匹配的元组大小写。

您也可以像这样解压缩您的元组:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map(tuple => {
   val (c, i) = tuple
   Leaf(c, i)
})