.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 更难使用(可变性的可能性更大)? @JohnBustos 答案想说的是ILookup<TKey, TValue>
只是创建IReadOnlyDictionary<TKey, IEnumerable<TValue>>
的一种更友好的方式
非常感谢@ScottChamberlain,这就是我希望的结果!!以上是关于.Net中ReadOnlyDictionary和查找之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
WCF 奇怪的 ReadOnlyDictionary 序列化
将 Dictionary<TKey, List<TValue>> 转换为 ReadOnlyDictionary<TKey, ReadOnlyCollection<T