我有以下几套:
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,因为如果你没有发现该项被抛出异常,但是我不希望没有异常.
MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")
Run Code Online (Sandbox Code Playgroud)
你问题的直接答案是使用过滤器,意思是:
moreElements = moreElements.filter( _.name != "nameOfElementToRemove")
Run Code Online (Sandbox Code Playgroud)
请注意,这将扫描该集.如果你想要一个按名称索引的集合,你应该使用Map.
但是,一些警告:
集合是独特元素的集合.为了比较集合中的元素,它使用包含类型的相等运算符.在您的情况下,Element类需要定义'equals'方法(和hashCode),以便该集合可以有效地比较实例.
此外,您需要记住Set是Scala中的不可变类,因此在您的示例中,您实际上是在创建一个新集合,尽管使用似乎可以修改现有集合的运算符.
如果需要可变集,则需要导入scala.collection.mutable.Set.
归档时间: |
|
查看次数: |
1115 次 |
最近记录: |