1

我从昨天起因类型不匹配错误而被阻止,我不知道如何纠正它。也许你可以帮助我。

def combine( head : (Char,Int), xs : Occurrences) : List[Occurrences] =
 xs.map { case (x,i) => for ( occu <- 1 to head._2 ) yield List((x,i), (head._1, occu)) }

这是我得到的错误:

type mismatch; 
found :   List[scala.collection.immutable.IndexedSeq[List[(Char, Int)]]]   
required: List[forcomp.Anagrams.Occurrences]

类型Occurrences定义为 type Occurrences = List[(Char, Int)]

我该如何解决这个错误?

4

2 回答 2

4

您可以使用 flatMap 来解决您的问题,它会为您连接(展平)列表。

def combine( head : (Char,Int), xs : Occurrences) : List[Occurrences] =
  xs.flatMap { case (x,i) => (1 to head._2).map(occu =>List((x,i), (head._1, occu))) }

现在,对于每一次出现,它都会生成一个包含(x,i)元组和(head._1, occu)元组的列表,并且所有列表本质上都++将由 flatMap 'd'在一起。

请注意,我盲目地转换您的代码,因为我知道这是家庭作业,所以我不会尝试分析算法是否正确。

于 2013-05-09T13:05:34.223 回答
1

问题是你的每个成员Occurrences都会产生一个列表——所以你会得到一个类似List[List[Occurrences]]. 我猜你可能会使用flatMap而不是map哪个会使列表变平。

于 2013-05-09T12:59:43.483 回答