按名称删除集合中的元素

use*_*663 1 scala element set

我有以下几套:

class Element (var Name:String, var Description: String)

var MoreElement: Set[Element] = Set(E1, E2, E3, ...)
Run Code Online (Sandbox Code Playgroud)

如何按名称删除集合MoreElement中的元素.

我找到了这个解决方案

MoreElement -= (MoreElement find (_.Name == "nameOfElementToRemove")).get
Run Code Online (Sandbox Code Playgroud)

但我不会使用get,因为如果你没有发现该项被抛出异常,但是我不希望没有异常.

Lan*_*dei 6

MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")
Run Code Online (Sandbox Code Playgroud)


Or *_*les 6

你问题的直接答案是使用过滤器,意思是:

moreElements = moreElements.filter( _.name != "nameOfElementToRemove")
Run Code Online (Sandbox Code Playgroud)

请注意,这将扫描该集.如果你想要一个按名称索引的集合,你应该使用Map.

但是,一些警告:

集合是独特元素的集合.为了比较集合中的元素,它使用包含类型的相等运算符.在您的情况下,Element类需要定义'equals'方法(和hashCode),以便该集合可以有效地比较实例.

此外,您需要记住Set是Scala中的不可变类,因此在您的示例中,您实际上是在创建一个新集合,尽管使用似乎可以修改现有集合的运算符.

如果需要可变集,则需要导入scala.collection.mutable.Set.