2011-03-06 24 views
4

如果我想將以下方法概括爲支持所有必要操作的所有集合類型(foldLeft,,map:+),那麼我該怎麼做?目前它只適用於列表。推廣採集方法

代碼:

def join[A](lists: List[List[A]]): List[List[A]] = { 
    lists.foldLeft(List(List[A]())) { case (acc, cur) => 
    for { 
     a <- acc 
     c <- cur 
    } yield a :+ c 
    } 
} 

回答

2

如果你想要這個僅對支持:+收藏,最簡單的方法就是在Seq而不是List來定義它。

可以使它更通用,一直到Traversable,通過使用建設者。我很樂意解釋一下,當我有更多時間在我手上時,但在這個層面上它往往會變得複雜。

斯卡拉茲應用仿函數可能是要走的路,但我會讓一個擁有更多斯卡拉經驗的人處理這個特定的答案。