2013-05-09 190 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