問題タブ [immutable-collections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
6282 参照

java - 不変性を壊さずに不変オブジェクトを更新する

不変性を良い方法で壊すことなく、別の不変オブジェクトから更新された不変オブジェクトを取得するにはどうすればよいですか。Scala で物事が達成される方法や、Immutables ライブラリで達成される方法に似たもの。

Customer.Builder.from(anotherCustomer).replaceOrder(oldOrder,newOrder).with(newName).build() のようなものを達成するにはどうすればよいですか

新しいオブジェクトを構築するために、古いオブジェクトを再利用し、必要なすべての変更をキューに入れます。

私はJavaを使用しています。

0 投票する
2 に答える
194 参照

c# - ImmutableList には AsReadOnly のようなメソッドがありますか?

AsReadOnly() は、コレクションの読み取り専用イメージ (不変コレクションのコピーに比べて高価ではない) を取得するための便利なメソッドです。ImmutableList に AsReadOnly のようなメソッドがあるかどうか疑問に思っていますか? いいえの場合、同様に実装する簡単な方法はありますか?

0 投票する
2 に答える
1333 参照

scala - Scala不変セットは可変ですか?

ドキュメントは言う:

パッケージ scala.collection.immutable のコレクションは、誰に対しても不変であることが保証されています。このようなコレクションは、作成後に変更されることはありません

しかし、私はこれから期待する動作を得られません:

ここで何が欠けていますか?

0 投票する
0 に答える
176 参照

.net - なぜ ImmutableDictionary なのかIDictionary の実装?

Dictionaryaと anImmutableDictionaryは書き込みに関してかなり異なるため、奇妙なデザインの選択のように見えます。(読み取りに関しては、どちらも を実装していますIReadOnlyDictionaryが、これは問題ありません*)

実際、クラスIDictionary<TKey, TValue>.Add()内のの現在の実装は.ImmutableDictionaryNewSupportedException

それで、これを行うポイントは何でしたか?メソッドがIDictionary実際には である を返す場合、ImmutableDictionaryたとえば、それに要素を追加するときに問題が発生します。

*議論の対象となるインターフェイスの名前を除く

0 投票する
3 に答える
1293 参照

c# - コンパイル時に不明な型の ImmutableList を作成する

Collection<T>T実行時のみ (コンパイル時ではなく) 既知である を指定すると、 を生成したいと思いImmutableList<T>ます。

作成したいメソッドは次のようになります。

ここで、originalList はIEnumerable、type はT生成されたのImmutableList<T>です。

どのように?!

(私はNET .Coreで作業しています)

編集:コメントのおかげで、実用的な解決策が見つかりました。AddRange メソッドを使用します。

0 投票する
9 に答える
17734 参照

java - ImmutableMap または Map を返す方が良いですか?

Mapを返すメソッドを書いているとしましょう。例えば:

しばらく考えた結果、このマップが作成されたら変更する必要はないと判断しました。したがって、 ImmutableMapを返したいと思います。

戻り値の型を汎用の Map のままにする必要がありますか、それとも ImmutableMap を返すように指定する必要がありますか?

ある面では、これがまさにインターフェイスが作成された理由です。実装の詳細を非表示にします。
一方で、このままにしておくと、他の開発者はこのオブジェクトが不変であるという事実を見逃す可能性があります。したがって、不変オブジェクトという主要な目標を達成することはできません。変更できるオブジェクトの数を最小限に抑えることで、コードをより明確にします。最悪の場合、しばらくすると誰かがこのオブジェクトを変更しようとする可能性があり、実行時エラーが発生します (コンパイラは警告しません)。

0 投票する
3 に答える
4891 参照

java - Guava Immutable Table の Java 8 コレクター

ユースケース: type
を返すメソッドを介して文字列のリストを処理します。例えばImmutableTable{R,C,V}ImmutableTable of {Integer,String,Boolean} process(String item){...}

結果を収集します。つまり、すべての結果をマージして を返しImmutableTableます。それを達成する方法はありますか?

現在の実装(ボヘミアンの提案による):

並列ストリームを使用するのはどうですか? 以下のコードに並行性の問題はありますか? 並列ストリームを使用すると、tableBuilder.build() で「インデックス 1800 で NullPointerException」が発生しますが、ストリームでは問題なく動作します。

以下のコードは、ストリームと並列ストリームでうまく機能します。しかし、行と列のエントリが重複しているため、ImmutableBuild は失敗しています。テーブルのマージ中に重複を防ぐ最善の方法は何ですか?

編集:異なるテーブルのマージ中に ImmutableTable.Builder に重複するエントリがある場合、失敗します。

ImmutableTables を HashBasedTable に配置して失敗を回避しようとする

しかし、「原因: java.lang.IllegalAccessError: クラス com.google.common.collect.AbstractTable にアクセスしようとしました」という実行時例外が発生します。

HashBasedTable は既存のエントリを最新のエントリで上書きし、重複するエントリを配置しようとしても失敗せず、集計された Immutable テーブルを返すため、HashBasedTable をアキュムレータとして使用して ImmutablesTables を収集するにはどうすればよいでしょうか。

0 投票する
2 に答える
1804 参照

c# - ディクショナリ参照を安全に返す C#

私が取り組んでいるプロジェクトのコードの安全性とコードの読みやすさ/視覚への影響に関して、内部 Dictionary インスタンス (C#) への参照を返すための 3 つのアプローチを検討しています。

次の 3 つのアプローチに絞り込みましたが、より良い提案をお待ちしています。現在、追加のボイラー プレートを使用せずに安全性を確保するための最良のバランスとして、#3を好みます。

1) 2 番目の ReadOnlyDictionary インスタンスを使用して内部 Dictionary をラップし、ReadOnlyDictionary だけがクラスをエスケープできるようにします。

2) Dictionary インスタンスを IReadOnlyDictionary として返しますが、再キャストすると変更される可能性があるため、オプション #1 または #3 ほど安全ではありません。

3) Dictionary.ToImmutableDictionary() を含むクラスをエスケープするときに ImmutableDictionary として返すため、返されるオブジェクトは内部辞書の不変ビューになりますが、これにより、より高いコストが発生するすべての呼び出しに対して新しいコピーが作成されます。小さな簡単な辞書(私のもの)を使用します。