3
如果我將Set [Int](或List [Int])的未知數作爲輸入並且想要合併 我不知道我需要生成的輸入List [Int]的大小這些元組作爲最終結果,實現這個目標的最好方法是什麼?我的代碼如下所示。從集合創建對
如果我將Set [Int](或List [Int])的未知數作爲輸入並且想要合併 我不知道我需要生成的輸入List [Int]的大小這些元組作爲最終結果,實現這個目標的最好方法是什麼?我的代碼如下所示。從集合創建對
好的。由於combine(xs)
產生List[List[Any]]
,並且您有a :: combine(xs)
,您只需將a
插入到所有組合列表中。您想要將a
與可能組合的每個元素結合使用。這導致我去這個解決方案。
你也可以推廣到lists:List[List[T]]
,因爲當你從lists:List[List[Int]]
合併時,你將得到一個List[List[Int]]
。
def combine[T](lists: List[List[T]]): List[List[T]] = lists match {
case Nil => lists
case x :: Nil => for(a <- x) yield List(a) //needed extra case because if comb(xs) is Nil in the for loop, it won't yield anything
case x :: xs => {
val comb = combine(xs) //since all further combinations are constant, you should keep it in a val
for{
a <- x
b <- comb
} yield a :: b
}
}
測試:
val first = List(7, 3, 1)
val second = List(2, 8)
val third = List("a","b")
combine(List(first, second))
//yields List(List(7, 2), List(7, 8), List(3, 2), List(3, 8), List(1, 2), List(1, 8))
combine(List(first, second, third))
//yields List(List(7, 2, a), List(7, 2, b), List(7, 8, a), List(7, 8, b), List(3, 2, a), List(3, 2, b), List(3, 8, a), List(3, 8, b), List(1, 2, a), List(1, 2, b), List(1, 8, a), List(1, 8, b))
我想你也可以概括這與其他收藏品相比清單的工作,但你不能輕易使用模式匹配這一點,你必須通過迭代工作。
由於我的回答指的是你刪除的代碼,我會保留在那裏.. – Kigyo