1

我有以下设置:

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

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

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

我找到了这个解决方案:

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

但是我不会使用get,因为如果你没有找到该项目就会抛出异常,但是我不希望没有异常。

4

2 回答 2

6
MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")
于 2012-11-23T14:32:36.630 回答
6

您问题的直接答案是使用过滤器,这意味着:

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

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

但是,一些警告:

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

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

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

于 2012-11-23T14:39:19.240 回答