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

あなたの質問に対する直接的な答えは、フィルターを使用することです。つまり、次のようなものです。

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

これによりセットがスキャンされることに注意してください。名前でインデックス付けされたセットが必要な場合は、マップを実際に使用する必要があります。

ただし、いくつかの注意事項があります。

セットは、固有の要素のコレクションです。セット内の要素を比較するために、含まれている型の等価演算子を使用します。あなたの場合、Element クラスは「equals」メソッド (および hashCode) を定義して、セットがインスタンスを効果的に比較できるようにする必要があります。

さらに、 Set は Scala の不変クラスであることを覚えておく必要があります。そのため、この例では、既存のセットを変更するように見える演算子を使用しているにもかかわらず、実際には新しいセットを作成しています。

可変セットが必要な場合は、scala.collection.mutable.Set をインポートする必要があります。

于 2012-11-23T14:39:19.240 に答える
6
MoreElement = MoreElement filterNot (_.Name == "nameOfElementToRemove")
于 2012-11-23T14:32:36.630 に答える