名称值集合与查找
我需要表示一些具有键和一个或多个值的数据,似乎有一个名称值集合或查找。
据我所知,两者之间的主要区别在于查找是不可变的,我应该注意两者之间还有其他显着差异吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要表示一些具有键和一个或多个值的数据,似乎有一个名称值集合或查找。
据我所知,两者之间的主要区别在于查找是不可变的,我应该注意两者之间还有其他显着差异吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
NameValueCollection
和ILookup
在几个方面有所不同。首先,NameValueCollection 是一个从字符串 -> 的映射。 string - 每个键只能有一个值,并且键和值都必须是字符串。这听起来并不符合您的要求:
其次,ILookup 本质上是一个通用多重映射 - 它将一个键映射到一组一个或多个值 - 并且键和值都映射可以是任何类型。正如您提到的,
ILookup<,>
是不可变的,但它也不能直接构造。获取实例的唯一方法是使用Enumerable.ToLookup()
方法。这要求所有数据必须立即可用 - 您无法随着时间的推移构建多重地图。如果您真正需要的是可变多重映射,则应该查看 MiscUtil,将
Dictionary>
包装在您自己的类型中。NameValueCollection
andILookup
are different in several ways.First, NameValueCollection is a map from string -> string - each key can only have one value, and both the key and the value must be strings. This doesn't sound like it meets your requirement:
Second,
ILookup
is essentially a generic multimap - it maps a key to a set of one or more values - and both the key and values can be of any type.ILookup<,>
is immutable, as you mention, but it's also not directly constructable. The only way to get an instance is to use theEnumerable.ToLookup()
method. This requires that all of the data must be available at once - you can't build the multimap over time.If what you really need is a mutable multimap, you should look at either the
EditableLookup<,>
in MiscUtil, your wrap aDictionary<TKey,List<TValue>>
in your own type.