Okai,我有以下方法:
public void Insert(SortedDictionary<byte[], uint> recs)
{
SortedDictionary<byte[], uint> records = new SortedDictionary(recs, myComparer);
}我希望实现的是用"myComparer“指定的新规则对"recs”中的记录进行排序,该规则实现了IComparer。它几乎是这样做的,但我遇到了一个例外,它发出了以下信息:
具有相同键的条目已经存在。
我想知道这是怎么可能的,因为"recs“已经是一本拥有大约130 k键的字典。
public int Compare(byte[] a, byte[] b)
{
return Inhouse.ByteConverter.ToString(a).CompareTo(
Inhouse.ByteConverter.ToString(b));
}(只是个狙击手..)
发布于 2011-04-13 13:32:03
如果"recs“与注入到记录中的比较不同,您可能会得到重复的;也就是说,如果"recs”通过对象引用进行比较,而myComparer比较实际的字节,则会发生冲突。
发布于 2011-04-13 13:32:44
检查比较器代码:
SortedDictionary(Of TKey,TValue)中的每个键根据指定的比较器必须是唯一的;因此,源字典中的每个键也必须根据指定的比较器是唯一的。
与您的新比较器,两个不同的键与正常的byte[]比较可能成为平等的。
这就是msdn 说..。
发布于 2011-04-13 13:34:58
您必须在调用方法中使用相同的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方法的代码吗?
https://stackoverflow.com/questions/5650044
复制相似问题