2016-05-29 4 views
2

List[Int]List[List[Int]]を返すという関数をScalaで作成したいとします。たとえば、getCombs(List(1,2))List(List(1), List(2), List(1,2))を返します。関数型プログラミングでスカラリストのリストを作成するには

私は機能プログラミングを研究していますので、そのパラダイムを使用して私の仕事を達成したいと思います。

私は次の関数を作成して動作しましたが、機能的なプログラミングスタイルで仕事をするより良い方法が存在すると思います。

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

関連する問題