.Net中ReadOnlyDictionary和查找之间的区别[关闭]

Posted

技术标签:

【中文标题】.Net中ReadOnlyDictionary和查找之间的区别[关闭]【英文标题】:Difference between ReadOnlyDictionary and Lookup in .Net [closed] 【发布时间】:2016-12-29 11:10:37 【问题描述】:

我仍在学习关于不可变性以及何时使用此类对象的大量知识,并已开始将更多 Lookups 合并到我的编码中,因为我知道它们是不可变的,因此通常比可以使用的字典更好由客户更改。

话虽如此,我知道在将ReadOnlyDictionaries 引入 .Net 方面已经做了大量工作,但我有点困惑,哪些地方会比另一个更有用,又是什么让它们与众不同。我在网上查看过,但似乎找不到任何解释这种差异的文章。

例如,我看到 this question 并认为 Lookup 会是一个更理想的解决方案,但我很困惑为什么它不会。

谁能给我指出正确的方向/解释一下哪个会比另一个用在哪里。

谢谢!!

【问题讨论】:

查找是一个键到多个值的映射,而字典是一个值的键。与不变性无关,但它们不是完全相同的数据结构。 听起来您想知道为什么将其设为只读?对于不应由外部或私人参与者更改的任何内容,答案都是相同的,即。为什么要只读某些东西/任何东西。它不是特定于字典的,我会说它确实是一个固执己见的问题。 我更困惑为什么还有一个 ReadOnlyDictionary 看起来查找基本上已经在执行这项工作。 您能否发布指向您所指的Lookups 类型的链接? 你看过this answer whats the point of lookup或this answer dictionary vs. lookup吗?一个区别是允许查找每个键有多个值,字典不能。 【参考方案1】:

查找是一种对集合进行分组的简单方法,您可以在其中为给定键设置一个 更多 值。字典为给定键提供 一个 值,并且仅提供一个值。根据您的情况,拥有一个返回 one 值的 Dictionary 可能最有意义,或者您可能希望拥有一个可以为您提供一组值的 Lookup。

如果你想要一个特定键的值集合,如果没有查找,你会遇到像

这样丑陋的东西
Dictionary<int, IEnumerable<String>>

哎呀。有关查找的更多信息,请参阅https://msdn.microsoft.com/en-us/library/bb460184%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396。

【讨论】:

谢谢,但就不变性而言,查找是否比 ReadOnlyDictionary 更难使用(可变性的可能性更大)? @JohnBus​​tos 答案想说的是ILookup&lt;TKey, TValue&gt; 只是创建IReadOnlyDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt; 的一种更友好的方式 非常感谢@ScottChamberlain,这就是我希望的结果!!

以上是关于.Net中ReadOnlyDictionary和查找之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WCF 奇怪的 ReadOnlyDictionary 序列化

将 Dictionary<TKey, List<TValue>> 转换为 ReadOnlyDictionary<TKey, ReadOnlyCollection<T

shell脚本,提取ip地址和子网掩码,和查外网ip地址信息。

身份证和查字母的数量

Python处理文件和查漏

oracle基本操作和查锁