【发布时间】:2010-10-07 19:18:23
【问题描述】:
基本上,我想让 Dictionary 使用重复的键,而不需要进入自定义比较器实现。有一个想法:
Dictionary<key, List<value>>
但它仍然有一些开销。我希望字典有“AllowDuplicates”。
【问题讨论】:
-
在我的搜索中没有找到。投票赞成,谢谢。
标签: .net dictionary priority-queue multimap
基本上,我想让 Dictionary 使用重复的键,而不需要进入自定义比较器实现。有一个想法:
Dictionary<key, List<value>>
但它仍然有一些开销。我希望字典有“AllowDuplicates”。
【问题讨论】:
标签: .net dictionary priority-queue multimap
如果您使用的是 .NET 3.5,那么 Lookup 可能就是您所追求的。
【讨论】:
.NET 2.0:PowerCollections 包含 OrderedMultiDictionary。
【讨论】:
您仍然可以使用 SortedList 并尝试通过将您的值和 Guid 组合到一个类中来创建唯一键。在这种情况下,您必须为新密钥实现 IComparer<NewKey>,例如:
class MyKey
{
public Guid Guid { get; set; }
public float Value { get; set; }
}
class MyComparer : IComparer<MyKey>
{
public int Compare(MyKey x, MyKey y)
{
if (x == null || y == null)
throw new InvalidOperationException("both of parameters must be not null");
if (x.Value < y.Value) return -1;
if (x.Value > y.Value) return 1;
return 0;
}
}
然后
var mySortedList = new SortedList<MyKey, MyValue>(new MyComparer());
【讨论】:
不在 Fx
如果您使用的是 .NET 3.5,请使用 Lookup 类。
【讨论】:
Dictionary的替代品,而不是SortedList的替代品。
那行不通。一旦你从比较器返回 0,它就会抛出“重复”异常。
您不需要类封装或任何东西,只需制作一个不返回 0(相等)结果的比较器。这是int 类型的键的示例
class MyComparer : IComparer<int>
{
public int Compare(int x, int y)
{
if (x < y)
return -1;
else return 1;
}
}
【讨论】:
我遇到了同样的问题..我需要一个可以允许重复键的 sortedList..
var sortList = new SortedList<string, IDictionary<string, object>>();
但这没用..所以我用了
var list = new List<KeyValuePair<string, IDictionary<string, object>>>();
将新数据添加到它作为..
list.Add(new KeyValuePair<string, IDictionary<string, object>>>(value, Dictionary));
我用 linq 对它进行排序没有问题..
试试List<KeyValuePair<TKey, List<TValue>>>();
【讨论】:
根据定义,字典包含唯一键。您上面的示例实际上是一种二维键控数组,这是我多次使用过的结构。为什么要拥有重复的密钥?如果你这样做了,词典将如何唯一地称呼它的成员?
【讨论】: