只要满足条件就跳过循环中的N个元素

是否有一种直接的惯用方法,甚至可能是现有的方法来在 Scala 中完成此操作:

执行循环/迭代器根据条件检查序列中的每个元素。每当满足条件时,跳过接下来的 N 个元素,然后继续检查其余的元素,直到再次满足条件,跳过 N 个元素,依此类推。

我想到的唯一方法是使用可变计数器或尾递归。有更好的解决方案吗?

回答

我很惊讶没有人提到unfold()(Scala 2.13.x)。

def select[A](input: List[A], test: A=>Boolean, skipN: Int): List[A] =
  List.unfold(input){ lst =>
    Option.when(lst.nonEmpty){
      if (test(lst.head)) (lst.head, lst.tail.drop(skipN))
      else (lst.head, lst.tail)
    }
  }

在这个版本中,每个被测试“条件”的元素都是结果的一个元素,跳过的元素(当然)不是。


以上是只要满足条件就跳过循环中的N个元素的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>