2017-01-26 9 views
6

純粋に機能的な辞書を提供するC#からの使用に適したクラスが(標準ライブラリにない場合はおそらくNugetパッケージとして)存在しますか?つまり、キーを追加または削除すると、元のものを変更せずに新しい辞書が返されます。C#純粋に機能的な辞書

+6

Eh、 'ImmutableDictionary '? https://msdn.microsoft.com/en-us/library/dn467181(v=vs.111).aspx不変の辞書を操作すると、元の辞書のコピーが作成され、操作が適用され、新しい不変の辞書が返されます。 –

+3

あなたは「機能的」という言葉を誤解しています。読み取り専用または不変の辞書について質問しています。両方の動作を提供するクラスがあります –

答えて

8

ImmutableDictionary<TKey, TValue>の詳細を見つけることができます。

https://msdn.microsoft.com/en-us/library/dn467181(v=vs.111).aspx

あなたは不変の辞書に元 辞書のコピーを操作するとき操作が適用され、新しい不変 辞書が返されます。

+2

[ReadOnlyDictionary'](https://msdn.microsoft.com/en-us/library/gg712875(v = vs。 110).aspx)と[[ImmutableDictionary]](https://msdn.microsoft.com/en-us/library/dn467063(v = v111).aspx)のような不変なコレクションで、前者はコレクションを変更するメソッドを提供しますが、元の変更可能なコレクションのラッパーであり、変更されている場合は読み取り専用コレクションも変更されます。不変なコレクションはラッパーではなく、変更することはできません。 –

+2

...しかし、それらは類似した['Add'](https://msdn.microsoft.com/en-us/library/dn466983(v = v111).aspx)のようにそれらを「変更する」メソッドを提供します'string'メソッドには、新しい変更不変コレクションが返されますが、古いものは変更されません。 –

3

「.NETには読み取り専用または不変の辞書がありますか?」という言葉を言い換えてください。その答えは、両方にイエスです。

読み取り専用辞書機能は、ReadOnlyDictionaryクラスによって提供されています。

不変性とは、別のものが変更を加えても、あるクライアントのコレクションのビューが変更されないことを意味します。

ここ

https://github.com/louthy/language-ext

:これは、最高の機能の辞書(またはそれらが機能的な世界では知られているよう「マップ」)は、このC#の機能ライブラリの一部として提供されていますImmutableDictionaryクラス

1

によって提供されマップモジュールは、次のとおりです。

https://github.com/louthy/language-ext/blob/master/LanguageExt.Core/Map.cs

免責事項:私はそれを書きました。しかし、ライブラリの理由は、C#の関数型プログラミングを容易にすることです。 InutableDictionaryの受け入れられた答えは、(不変のセマンティクスを使用していても)より多くのOOスタイルのインターフェースです。

関連する問題