2017-11-19 9 views
1

は、私は簡単に私の質問を説明するために簡略化したコードを提供します:収量 - リストに以前に格納された要素を使用して、[スカラ]

  • を私は反復するデータのリストを持っているすなわちval balance = 10
  • ユーザーの残高を持っていますfor(elem <- dataList) yield (interest(elem, balance))を使用します。
    • 私の場合は、与えられた引数に対して計算を実行し、数字を返します。提供残高+計算された利子です。
私は、リスト内の次の要素のための最新の私のバランスを保つことができるように

どのように私は収量で私のデータリスト内の次の要素については、この新しく返された値を使用することができますか?

すなわちfor(elem <- dataList) yield (interest(elem, newBalanceFromPreviousYield))

答えて

0

私が思うに、ちょうどyieldでそれを使用するための簡単な方法はありません。あなたのユースケースは折りたたみパターンを思い出させるので、それを使ってみましょう。我々はバランスを蓄積し、interest()呼び出しでそれを使用する:

dataList.foldLeft(List.empty[Int]) { (acc, elem) => 
    acc match { 
    case Nil => 
     // if no balances accumulated yet, use default balance = 10 
     List(interest(elem, balance)) 
    case [email protected] :: _ => 
     // else use accumulated balance 
     interest(elem, newBalance) :: all 
    } 
}.reverse // we need to reverse result list due to :: usage 
1

私はあなたが最後に結果として取得したい何をすべきか疑問から、かなり分かりません。ただ、最終的なバランスや各要素の残高のリスト?後者の場合(これはリストに適用された/結果の結果のタイプであるため)、

dataList.scanLeft(10)((acc, currentElem) => interest(currentElem, acc)).tail 
必要なのは、 scanオペレーションです。
関連する問題