Okai,我有以下方法:
public void Insert(SortedDictionary<byte[], uint> recs)
{
SortedDictionary<byte[], uint> records = new SortedDictionary(recs, myComparer);
}
我希望实现的是使用由实现IComparer的“myComparer”指定的新规则对“recs”中的记录进行排序。它几乎是这样做的,但是我遇到了一个例外,其中包含以下消息:
具有相同密钥的条目 存在。
我想知道这是怎么可能的,因为“recs”已经是一个大约130k键的字典。
public int Compare(byte[] a, byte[] b)
{
return Inhouse.ByteConverter.ToString(a).CompareTo(
Inhouse.ByteConverter.ToString(b));
}
(它只是一个snipette ..)
答案 0 :(得分:1)
如果“recs”的比较器与您注入记录的比较器不同,则可能会出现重复;也就是说,如果“recs”通过对象引用进行比较并且myComparer比较实际字节,则会发生冲突。
答案 1 :(得分:0)
检查比较器代码:
SortedDictionary中的每个键(Of TKey,TValue)必须是独一无二的 到指定的比较器;因此,源词典中的每个键也必须是 根据指定的比较器唯一。
使用新的比较器,2个具有正常byte[]
比较的不同键可能变得相等。
这就是msdn says...
答案 2 :(得分:0)
您必须在调用方法中使用相同的Dictionary
对象。所以我想你的代码是这样的:
SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
foreach (var thing in things)
{
dic.Clear();
Populate(dic);
Insert(dic);
}
它应该是这样的:
SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
foreach (var thing in things)
{
dic = new SortedDictionary<byte[], uint>();
Populate(dic);
Insert(dic);
}
您可以发布调用Insert
方法的代码吗?