微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#SortedDictionary产生异常结果

如何解决C#SortedDictionary产生异常结果

| 我正在使用SortedDictionary,其中键是整数,值是字符串。
SortedDictionary<int,string> dic = new SortedDictionary<int,string>();
现在说我添加
dic.Add(100,\"String 1\");
dic.Add(1113,\"String 2\");
dic.Add(1,\"String 3\");
dic.Add(70,\"String 4\");
然后做一个foreach循环
foreach(string item in dic.Values) {
        Console.WriteLine(item);
}
那么这些值就永远不会以正确的顺序出现,而是以几乎随机的顺序出现,这与普通的Dictionary具有相似的行为。有人知道为什么吗?我想念/做错了什么吗? PS:当我说它以随机顺序出现时,我的意思是按键顺序没有值,所以它像1113、70、1,100一样出现 看来我可能已经简化了这个问题,但是它不应该有所作为,涉及很多嵌套,最终的字典实际上是另一本字典的子代,而另一本字典又是另一本的子代!
SortedDictionary<String,SortedDictionary<String,SortedDictionary<int,String>>>>()
我正在浏览的字典是
SortedDictionary<int,String>>
这是请求的循环:
foreach (SortedDictionary<String,String> cDic in openTrades.Values)
{
    String cTimestamp = convertTimestamp(cDic[\"open\"]);
    if (!closeTrades.ContainsKey(cDic[\"key\"]) && bararray.ContainsKey(cDic[\"pair\"]))
    {
          foreach (SortedDictionary<String,String> bDic in bararray[cDic[\"pair\"]][cDic[\"frame\"]].Values)
          {
               //This is the relative Loop
          }
    }
}
bararray是我们的主要SortedDictionary(此问题的主题) openTrades是另一个SortedDictionary 谢谢 詹姆士     

解决方法

        
SortedDictionary
按键排序而不是值。 如果您执行以下操作
foreach(var item in dic)
{
        Console.WriteLine(item.Key + \"-\" + item.Value);
}
您会看到它按键排序输出:
1-String 3
70-String 4
100-String 1
1113-String 2
    ,        我不确定您认为输出应该是什么,但是对我来说是
String 3
String 4
String 1
String 2
哪个是对的。也许您觉得ѭ6保持插入顺序?快速阅读文档会发现情况并非如此。值通过键上的ѭ11排序(假定未提供自定义比较器。)     ,        和其他所有人一样,如果字典是按键而不是按值排序的,那么我的第一印象就是您感到困惑。但是,阅读您的评论似乎不是问题。 因此,我简单地(像其他人一样)将代码粘贴到Visual Studio中并使其运行。输出是(如预期的那样):
String 3
String 4
String 1
String 2
如果您的机器上的顺序不同,那么似乎确实发生了一些奇怪的事情。也许您可以再次运行,但是对您的foreach语句进行一些更改:
foreach (var item in dic)
{
    Console.WriteLine(item);
}
现在在项目中您将得到
KeyValuePair<int,string>
,它将很好地打印出来,如下所示:
[1,String 3]
[70,String 4]
[100,String 1]
[1113,String 2]
因此,您将再次检查确切的键属于您获得的每个值,并且可能会找到另一个线索,说明为什么您得到了意外的排序。     ,        问题出在您的foreach循环中。 SortedDictionary类公开值列表,但该列表未排序,因此您只是从未排序的列表中读取。 再次阅读代码,我意识到列表是按排序顺序显示的。我认为发生的事情是您感到困惑,因为您以某种方式希望它在“值”字段中排序。 SortedDictionary对Key字段(add语句中的整数)进行排序。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。