按名称删除集合中的元素

时间:2012-11-23 14:20:16

标签: scala set element

我有以下一套:

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

var MoreElement: Set[Element] = Set(E1, E2, E3, ...)

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

我找到了这个解决方案:

MoreElement -= (MoreElement find (_.Name == "nameOfElementToRemove")).get

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

2 个答案:

答案 0 :(得分:6)

MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")

答案 1 :(得分:6)

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

moreElements = moreElements.filter( _.name != "nameOfElementToRemove")

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

然而,一些警告:

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

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

如果你想要一个可变集,你需要导入scala.collection.mutable.Set。