首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SortedDictionary重复密钥?

SortedDictionary重复密钥?
EN

Stack Overflow用户
提问于 2011-04-13 13:27:37
回答 3查看 3.9K关注 0票数 0

Okai,我有以下方法:

代码语言:javascript
复制
public void Insert(SortedDictionary<byte[], uint> recs)
{
    SortedDictionary<byte[], uint> records = new SortedDictionary(recs, myComparer);
}

我希望实现的是用"myComparer“指定的新规则对"recs”中的记录进行排序,该规则实现了IComparer。它几乎是这样做的,但我遇到了一个例外,它发出了以下信息:

具有相同键的条目已经存在。

我想知道这是怎么可能的,因为"recs“已经是一本拥有大约130 k键的字典。

代码语言:javascript
复制
    public int Compare(byte[] a, byte[] b)
    {
        return  Inhouse.ByteConverter.ToString(a).CompareTo(  
                    Inhouse.ByteConverter.ToString(b));
    }

(只是个狙击手..)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 13:32:03

如果"recs“与注入到记录中的比较不同,您可能会得到重复的;也就是说,如果"recs”通过对象引用进行比较,而myComparer比较实际的字节,则会发生冲突。

票数 1
EN

Stack Overflow用户

发布于 2011-04-13 13:32:44

检查比较器代码:

SortedDictionary(Of TKey,TValue)中的每个键根据指定的比较器必须是唯一的;因此,源字典中的每个键也必须根据指定的比较器是唯一的。

与您的新比较器,两个不同的键与正常的byte[]比较可能成为平等的。

这就是msdn 说..。

票数 0
EN

Stack Overflow用户

发布于 2011-04-13 13:34:58

您必须在调用方法中使用相同的Dictionary对象。所以我想你的代码是这样的:

代码语言:javascript
复制
 SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
 foreach (var thing in things)
 {
     dic.Clear();
     Populate(dic);
     Insert(dic);
 }

它应该是这样的:

代码语言:javascript
复制
SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
foreach (var thing in things)
{
    dic = new SortedDictionary<byte[], uint>();
    Populate(dic);
    Insert(dic);
}

你能发布调用你的Insert方法的代码吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5650044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档