-2

foldLeft の反復回数を制限します。特定の条件に基づいて、foldLeft の反復を終了したいと考えています。条件は、リスト要素からではなく、別の変数から評価されます。

反復を制限するために takeWhile を使用してみました。ただし、takeWhile の述語は、外部値ではなくリストの要素に対して機能します。

val numberList = List (1.0, 2.0, 3.0, 4.5, 5.5)
var sampleList = List [Double]()
var sum = 0.0
val sumLimit = 6.0 
var param = (sampleList, sum, sumLimit)
var filteredList = numberList.foldLeft(param) {
    (p, element) => {
        if (p._2 < p._3) {
            sampleList = p._1 :+ element
            (sampleList, p._2 + element, p._3)
        } else {
            (p._1, p._2, p._3)
        }
    }
}

上記のコードは 5 回繰り返します。ただし、(p._2 < p._3) の間、反復処理を行いたいと考えています。上記のコードは、実行している double (1.0、2.0、3.0) の次のリストを返す必要があります。ただし、反復回数を制限したい。

4

1 に答える 1

1

事前定義された折り畳みはステートレスであるため、短絡は実際には機能しません。したがって、単純な再帰 (フォールドは短縮形です) または反復は、あなたが望むものに近いようです:

def f(p, lst, acc) = ??? //your function
var filteredList = f(p,numberList,Nil)
于 2019-06-26T00:17:23.203 に答える