C#纯函数字典

时间:2017-01-26 09:01:49

标签: c# .net collections functional-programming

是否存在(如果不是在标准库中,那么可能作为Nuget包)一个适合在C#中使用的类,它提供了一个纯函数字典?也就是说,在添加或删除密钥的情况下,将返回一个新字典,同时保留原始字典不变?

4 个答案:

答案 0 :(得分:8)

您正在寻找不可变的集合,ImmutableDictionary<TKey, TValue>在您的案例中:

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

  

当您操纵不可变字典时,原始文件的复制   字典制作,应用操作和新的不可变   

返回字典

答案 1 :(得分:3)

我在System.Collections.Immutable中找到了ImmutableDictionary。您可以在https://msdn.microsoft.com/fr-fr/library/dn467181(v=vs.111).aspx

找到更多信息

答案 2 :(得分:3)

这个问题应该改为“.NET是否有任何只读或不可变的词典”?答案对两者都是肯定的。

只读字典功能由ReadOnlyDictionary类提供。

不变性意味着别的东西 - 这意味着即使另一个客户正在对其进行更改,一个客户对集合的看法也不会改变。这是由ImmutableDictionary

提供的

答案 3 :(得分:1)

最好的功能词典(或#39;地图&#39;因为它们在功能世界中已知)可作为此C#功能库的一部分提供:

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

这是地图模块:

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

免责声明:我写了。但是库的原因是为了促进C#中的函数式编程。而ImmutableDictionary的接受答案是更加OO风格的接口(即使它使用不可变的语义)。