2017-11-19 12 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 
이 필요하다고 가정합니다.