我昨天因为类型不匹配错误而被阻止,我不知道如何纠正它。也许你可以帮助我。
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)]
如何解决此错误?
答案 0 :(得分: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基本上++
组合在一起。
请注意,我盲目地转换代码,因为我知道这是作业,所以我不会尝试分析算法是否正确。
答案 1 :(得分:1)
问题在于,Occurrences
的每个成员都会产生一个列表 - 所以你会得到像List[List[Occurrences]]
这样的东西。我猜您可以使用flatMap
代替map
,这会使列表变平。