は私が変更可能なScalaのセットを持っている内部の可変Scalaのコレクションを更新することができません:私は結果が設定されているループ(またはマップ)
valueSet -= 1
(0,2)を実行
val valueSet = scala.collection.mutable.Set[Int](0, 1, 2)
しかし、私はループやマップ内で同じことを実行します。
Range(0, 10).map(entry => valueSet -= 1)
valueSet
res130: scala.collection.mutable.Set[Int] = Set(0, 1, 2)
valueSetの内容は次のとおりです。Set(0、1、2)。
ループを実行し、条件に基づいて、ループが終了するかSetが空になるまで、Setから要素を削除する必要があります。ループ内でvalueSetを印刷しようとしましたが、正しく動作していますが、ループが終了するとvalueSetが元のセットに戻ります。
変更可能なバージョンを使用すると、私が変更可能なバージョンを使用している理由のコードのパフォーマンスに深刻な影響を与えます。
助けてください!
EDIT: 私はスパークシェルREPLを使用しています。 (火花1.6.1)
私はいくつかのことをもっと試してみました。私がループやマップを実行していて、RDDを実行していても動作しないと分かりました。しかし、分散されていないコレクションの場合、それは機能します。私はこれがRDDの変換機能であり、何もしないという事実と関係があると推測しています。しかし、それは私の推測です。
'map'という名前は、構造体をマップしています。それは物事の更新を行うのに使われることを意味するのではなく、前記構造の要素を変換することを意味します。実際に不変のバージョンを試しましたか?私はこれが再帰を使ってはるかにエレガントに(そして、funtional-ish)解決できると思います。 – rethab
"valueSetの内容は次のとおりです。Set(0、1、2)。"いいえ、違います。私はちょうどREPLでそれを試みた。 'valueSet'の内容は' Set(0、2) 'に変更されます。おそらくあなたがマップで行ったことは 'valueSet - = 1'ではなく' valueSet-1'でしたか? – Suma
はい、私はそれを見ているエレガントな方法があります。私はちょうどすぐに仕事を始めるために汚いものがほしいと思った。 –