2016-05-29 49 views
2

我想在Scala中創建一個函數,給定List[Int]返回List[List[Int]]。例如getCombs(List(1,2))應返回List(List(1), List(2), List(1,2))如何用函數式編程風格在Scala中創建列表清單

我正在學習函數式編程,所以我想用這個範例來完成我的任務。

我已經創建了以下函數並且它可以工作,但我認爲在函數式編程風格中有更好的方法來完成這項工作。

def getCombs(coins: List[Int]): List[List[Int]] = { 

    var l = List(coins) 
    var i = 0 
    for (i <- 1 to coins.length - 1) { 
    var it = coins.combinations(i) 
    while (it.hasNext) { 
     val el = it.next 
     val newL = el :: l 
     l = newL 

    } 

    } 
    return l 
} 

回答

2

我先創建一個範圍,我想打,然後我用flatMap創建的所有組合,並做一個清單出來它們的組合的所有長度:

def allCombinations(list: List[Int]): List[List[Int]] = { 
    (1 to list.length).flatMap(list.combinations(_)).toList 
} 
1
(1 to coins.length).flatMap { 
    coins.combinations(_) 
}.toList 
+2

這將返回一個List [Iterator [List [Int]]]。 – marstran

+1

我將地圖更改爲flatMap ...似乎更好地糾正了代碼,而不是給@Dima的回答投下一票。 :-) –

+0

謝謝,@KeithPinson。有些人必須像那樣... :) – Dima