首页 > 解决方案 > 循环遍历整数列表并减少它们直到数量为零

问题描述

我有这个问题,可以简化为以下内容:

假设我有一个整数列表,如下所示:

List(20,30,40,50,90) 

和 x = 100 的值说。

我想遍历该整数列表并从 100 中减去第一个值,然后是第二个值,依此类推,直到 x 达到 0。

所以在这个例子中,我会留下

List(0,0,0,40,90) and x = 0

我通过列表的元素尝试了通常的地图,但问题是 x = 100,我不知道如何在地图中不断更新它以在从中减去列表中的元素后获得它的新减少值.

我确信有一种简单的方法可以做到这一点,但我目前没有看到它。

标签: scala

解决方案


正如评论中所建议的以及使用 foldLeft 的其他答案的替代方法,您可以手工制作自己的尾递归方法:

def compute(xs: List[Int], x: Int): List[Int] = {

  def loop(cs: List[Int], ns: List[Int], remainder: Int): List[Int] =
    cs match {
      case ::(head, next) =>
        loop(next, ns :+ math.max(head - remainder, 0), math.max(remainder - head, 0))
      case Nil            => ns
    }
  loop(xs, List.empty, x)
}

compute(List(20, 30, 40, 50, 90), 100)

输出:

val res0: List[Int] = List(0, 0, 0, 40, 90)

推荐阅读