2013-05-09 166 views
1

自昨天起,我阻止了有关类型不匹配错误的信息,但我看不到如何更正它。也许你可以帮助我。Scala中的类型不匹配错误

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

你可以通过使用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一起列表。

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

+0

别担心,根据你的回答,我终于找到了解决办法。谢谢 – Dimitri 2013-05-09 14:01:44

+0

很高兴听到它! – coltfred 2013-05-09 16:03:32

1

问题是,对于Occurrences的每个成员,您将生成一个列表 - 因此您得到的内容类似于List[List[Occurrences]]。我想你可能会使用flatMap而不是map,这将使列表变平。

+0

感谢您的回答。我忘了flatMap !! – Dimitri 2013-05-09 14:02:00