【问题标题】:Conditional termination from foldLeft iteration [duplicate]foldLeft 迭代的条件终止
【发布时间】:2019-06-26 08:17:23
【问题描述】:

在 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

【问题讨论】:

    标签: scala iteration foldleft


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2021-12-27
      • 2010-09-13
      相关资源
      最近更新 更多