在 scala 中使用 _._2 时如何在过滤器谓词中使用 OR 运算符

How to use the OR operator within a filter predicate when using _._2 in scala

我有下面的代码,它通过检查第二个元素(索引号)是否与另一个变量匹配来过滤元组。

statements.zipWithIndex.filterNot(_._2 == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) map {
 case (statement,_) => statement }

我正在尝试使用 OR 运算符按第二个条件过滤掉,如下所示(1 只是一个示例)

statements.zipWithIndex.filterNot(_._2 == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) || _._2 == 1  )map {
     case (statement,_) => statement
   }

但它给我一个缺少参数类型的错误。当涉及到单个元素而不是元组时,我很熟悉,即在我的代码中使用了下面的代码并且工作正常但是我认为我可能做错了什么并且误解了使用 _._2.

statements.filterNot(x => x.toString().contains("NOP") && x.isUnlabelled)

这是因为你使用了两次下划线。连续的下划线指的是连续的 lambda 参数,你只有一个。您需要以更明确的形式编写它:

statements.zipWithIndex
  .filterNot { case(_, index) => index == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) || index == 1  }
  .map { case(statement, _) => statement}