如何在Scala中过滤出字符串向量中的一个ocurrence?

如何在Scala中过滤出字符串向量中的一个ocurrence?,scala,Scala,我需要从向量(“木材”、“石头”、“魔药”、“石头”、“木材”)创建一个新的向量,但不带字符串“木材”,如果我使用方法filterNot(==“木材”)它会删除与木材“匹配的两个元素。是否有一个过滤器只过滤一次电流 我尝试使用.distinct,但我需要向量中的两个石头。您可以在第一次出现时分割集合,然后将其删除: val (pre, post) = c.span(_ == "lumber") pre.dropRight(1) ++ post 当集合中没有“木材”时,pre

我需要从
向量(“木材”、“石头”、“魔药”、“石头”、“木材”)
创建一个新的向量,但不带字符串
“木材”
,如果我使用方法
filterNot(==“木材”)
它会删除与
木材“
匹配的两个元素。是否有一个过滤器只过滤一次电流


我尝试使用
.distinct
,但我需要向量中的两个石头。

您可以在第一次出现时分割集合,然后将其删除:

val (pre, post) = c.span(_ == "lumber")
pre.dropRight(1) ++ post
当集合中没有“木材”时,
pre
将为空,
pre.dropRight(1)
将不掉落任何内容

对于2.13,您可以选择使用
管道的单衬套:

import scala.util.chaining._

c.span(_ == "lumber").pipe(split => split._1.dropRight(1) ++ split._2)

最简单的方法是使用diff:

val c = Vector("lumber", "stone", "magic potion","stone","lumber")
c diff Vector("lumber")
// result: Vector(stone, magic potion, stone, lumber)

我想最简单的解决方案是使用一点可变状态,这样你就可以跟踪你是否已经过滤了。另一个选择是使用
列表
,编写自己的递归函数。谢谢,这绝对是最简单的方法!!!