有没有允许重复的 Dictionary/SortedList 的替代方案?
可能的重复:
允许重复键的 C# 可排序集合
基本上我想要使字典可以使用重复的键,而无需进入自定义比较器实现。 有一个想法:
Dictionary<key, List<value>>
但它仍然有一些开销。 我希望字典有“AllowDuplicates”。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您使用的是 .NET 3.5,那么 Lookup 可能就是您的选择重新之后。
If you're using .NET 3.5 then Lookup is probably what you're after.
.NET 2.0:PowerCollections 包含
OrderedMultiDictionary.
.NET 2.0: PowerCollections contains the
OrderedMultiDictionary
.您仍然可以使用 SortedList 并尝试通过将您的值和 Guid 组合到一个类中来创建唯一键。 在这种情况下,您必须为新密钥实现
IComparer
,如下所示:然后
You still can use SortedList and try to make a unique key by combining your value and a Guid into a class. In this case, you must implement the
IComparer<NewKey>
for your new key, something like:and then
不在 Fx < 中 3.5.. 显然,您可以使用 IList 对象的字典来实现一个。 但接下来你就会遇到封装问题/责任。
如果您使用的是 .NET 3.5,请使用 Lookup 类。
Not in the Fx < 3.5.. You can implement one, obviously, with a Dictionary of IList objects. But then you have the encapsulation issue/responsibility.
If you're using .NET 3.5, use the Lookup class.
那是行不通的。 一旦从比较器返回 0,它就会抛出“重复”异常。
您不需要类封装或任何东西,只需创建一个不返回 0(相等)结果的比较器即可。 这是
int
类型密钥的示例That does not work. As soon as you return 0 from the comparer, it will throw "duplicate" exception.
You don't need classes encapsulation or anything, just make a comparer that does not return 0 (equal) result. Here is an example for
int
type of key根据定义,字典包含唯一的键。 上面的示例实际上是一种二维键控数组,这是我多次使用的结构。 为什么你想要重复的钥匙? 如果您这样做,词典将如何独特地称呼其成员?
By definition, a Dictionary contains unique keys. Your example above is effectively a sort of two-dimensional keyed array, a structure I've used many times. Why would you want to have duplicate keys? If you did, how would the Dictionary uniquely address its members?
我遇到了同样的问题..我需要一个可以允许重复键的sortedList..
但这不起作用..所以我使用
向其中添加新数据..
使用linq我对它进行排序没有问题..
尝试
List>>();
I came across with same issue.. I needed a sortedList which can allow Duplicate Keys..
but this didnt work.. so i used
add new data to it as ..
with linq i sorted it with no problem..
Try
List<KeyValuePair<TKey, List<TValue>>>();