Set
からSet
がcase class
ないとunapply
方法を持っていない変換する必要があります。
これらの2つのことは、Set
で直接パターンマッチングできないことを意味します。
(更新:ダニエルは正しく彼の答えに示したとおりに、Set
のためにあなた自身の抽出を定義しない限り)あなたは、代替を見つける必要があります
、私は折り機能
def union(s: Set[Int], t: Set[Int]): Set[Int] =
(s foldLeft t) {case (t: Set[Int], x: Int) => t + x}
を使用してお勧めしたいです
これはそれらを一
ずつ添加、
t
上
s
の要素を蓄積します
ここ
折りたたみ参考のために必要であれば、折り畳み操作のためのdocsです:
foldLeft[B](z: B)(op: (B, A) ⇒ B): B
は右に左に行く、開始値と、このセットのすべての要素に二項演算子を適用します。
注:基本となるコレクションタイプが注文されていない限り、異なる実行で異なる結果が返されることがあります。または演算子は連想であり交換可能です。
B the result type of the binary operator.
z the start value.
op the binary operator.
returns the result of inserting op between consecutive elements of this set, going left to right with the start value z on the left:
op(...op(z, x_1), x_2, ..., x_n)
where x1, ..., xn are the elements of this set.
ニース。 Setには定義された順序がないので、SetExtractorを実際の値で使うべきではありません。 'case SetExtractor(1、xs @ _ *)=> ...'; 'Set(1,2,3)'で動作しますが、一般的には動作しません。 'Set(1,2,3,4,5)'で置き換えます。ダニエルは、解体バインドがSetから任意の要素を選ぶことを可能にする方法としてこれを提供しています。また、残りのxsはArrayBufferであることに注意してください。セットとして使うには 'xs.toSet'を使います。 – AmigoNico