foldLeft迭代的条件终止

时间:2019-06-25 23:44:53

标签: scala iteration foldleft

foldLeft中的迭代次数限制。 我想根据特定条件终止foldLeft的迭代。条件是通过不同的变量而不是列表元素来评估的。

我尝试使用takeWhile限制迭代;但是takeWhile的谓词对list的元素起作用,而不对外部值起作用。

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

1 个答案:

答案 0 :(得分:1)

由于预定义的折叠是无状态的,因此短路不会真正起作用。普通递归(折叠是速记)或迭代似乎更接近于您想要的:

def f(p, lst, acc) = ??? //your function
var filteredList = f(p,numberList,Nil)