我有以下一套:
class Element (var Name:String, var Description: String)
var MoreElement: Set[Element] = Set(E1, E2, E3, ...)
如何按名称删除集合MoreElement中的元素。
我找到了这个解决方案:
MoreElement -= (MoreElement find (_.Name == "nameOfElementToRemove")).get
但我不会使用get,因为如果你没有发现该项被抛出异常,但是我不希望例外。
答案 0 :(得分:6)
MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")
答案 1 :(得分:6)
直接回答你的问题是使用过滤器,意思是:
moreElements = moreElements.filter( _.name != "nameOfElementToRemove")
注意这将扫描该组。如果你想要一个按名称索引的集合,你应该使用Map。
然而,一些警告:
集合是唯一元素的集合。为了比较集合中的元素,它使用包含类型的相等运算符。在您的情况下,Element类需要定义'equals'方法(和hashCode),以便该集合可以有效地比较实例。
此外,您需要记住,Set是Scala中的不可变类,因此在您的示例中,您实际上是在创建一个新集合,尽管使用似乎可以修改现有集合的运算符。
如果你想要一个可变集,你需要导入scala.collection.mutable.Set。