可能重复:
允许重复键的 C# 可排序集合
基本上,我想让 Dictionary 使用重复的键,而不需要进入自定义比较器实现。有一个想法:
Dictionary<key, List<value>>
但它仍然有一些开销。我希望字典有“AllowDuplicates”。
可能重复:
允许重复键的 C# 可排序集合
基本上,我想让 Dictionary 使用重复的键,而不需要进入自定义比较器实现。有一个想法:
Dictionary<key, List<value>>
但它仍然有一些开销。我希望字典有“AllowDuplicates”。
如果您使用的是 .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 < 3.5 中。显然,您可以使用 IList 对象的 Dictionary 来实现。但是你有封装问题/责任。
如果您使用的是 .NET 3.5,请使用Lookup类。
那是行不通的。一旦你从比较器返回 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>>>();