2011-06-13 19 views
1

我不认为我在前面的问题张贴了足够的细节,人们似乎停止响应,所以我重新张贴因为我们需要知道为什么这个问题发生C#SortedDictionary产生不寻常的结果 - Mk2的

我m与SortedDictionary一起工作,当我们循环它时,我们会得到奇怪的结果。

有很多嵌套涉及和最终字典实际上是另一个字典的孩子是另一个孩子!

是完整的巢。

SortedDictionary<String, SortedDictionary<String, SortedDictionary<int, SortedDictionary<String, String>>>>() 

我正在通过循环的字典是

SortedDictionary<int, SortedDictionary<String, 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

现在,当我们通过dic循环以一个整数作为索引,我们得到不同的结果 - IE。如果我们有1,2,3,4作为循环的关键字,可能会按照以下顺序显示它们:4,2,1,3显然没有意义,因为这意味着它是一个已排序的字典。

任何帮助尽快将不胜感激,因为即时通讯难倒这个问题。 谢谢 James

+4

它在我看来,如果你应该能够想出一个简短但完整的程序来演示问题,但哪个*不需要所有这些嵌套。 – 2011-06-13 12:36:30

+0

你能解释更多像barArray和openTrades的实现吗 – 2011-06-13 12:43:04

+0

我添加嵌套的原因是因为它是最简单的形式 - 这工作得很好,但是当它嵌套时它不会! Navid你需要更多解释吗? – James 2011-06-13 15:05:16

回答

0

我的直觉是你误解了你所看到的结果。在你展示的循环中,你没有通过int键循环,你正在遍历值列表。因此,您无法确定int键实际返回的顺序。

您可能在SortedDictionary本身中有某些东西,它应该指出它所属的封闭字典中的哪个int。我会想象,在你如何形成这些值时存在一些错误,以致于键中的int实际上并不匹配该值。

我建议缩小问题范围,通过openTrade s而不是openTrades.Values。这样你就可以在返回的KeyValuePair中看到真正的键。我很确定他们会出现排序。

+0

感谢您的评论,但是当字典没有嵌套时,同一个循环可以很好地工作,但是当它嵌套时,当我们看到问题时 – James 2011-06-13 15:06:14

+0

我没有建议更改嵌套的任何内容。我只是提供了一种修改你的foreach循环的方法,所以你的代码的功能保持不变,但你有更好的机会理解发生的事情,因为你有一个额外的当前“真正”的关键信息。 – 2011-06-13 19:31:11

+0

在将数据添加到已排序字典中之前创建“真正密钥” - 然后在最终字典中形成密钥和值。 但是我尝试过使用KeyValuePair,我得到的结果是错误地遍历字典 – James 2011-06-13 21:14:25

相关问题