产生异常结果的C#排序字典-Mk2

本文关键字:排序 字典 -Mk2 异常 结果 | 更新日期: 2023-09-27 17:58:56

我认为我在上一个问题中没有发布足够的细节,人们似乎停止了回应,所以我转发了,因为我们需要知道这个问题为什么会发生

我正在使用一个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是我们的主排序词典(这个问题的主题)openTrades是另一个SortedDictionary

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

如果我在这个问题上遇到困难,我们将不胜感激。谢谢James

产生异常结果的C#排序字典-Mk2

我的直觉是你误解了你所看到的结果。在您显示的循环中,您不是在循环int键,而是在循环值列表。因此,您无法确定实际返回int键的顺序。

SortedDictionary本身可能有一些东西,应该指示它属于封闭字典中的哪个int。我想,在形成这些值的过程中存在一些错误,因此键中的int实际上与值不匹配。

我建议缩小问题范围,通过openTrade而不是openTrades.Values进行预测。通过这种方式,您将能够在返回的KeyValuePair中看到真正的密钥。我很确定他们会看起来很有条理。