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
答案 0 :(得分:1)
由于预定义的折叠是无状态的,因此短路不会真正起作用。普通递归(折叠是速记)或迭代似乎更接近于您想要的:
def f(p, lst, acc) = ??? //your function
var filteredList = f(p,numberList,Nil)