我正在使用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);
}
然后这些值永远不会以正确的顺序出现,它们以几乎随机的顺序出现,这与正常的字典相似。有人有任何想法吗?我错过了/做错了吗?
PS:当我说它以随机顺序出现时,我的意思是关键顺序不是值,所以它就像1113,70,1,100
似乎我可能已经过度简化了问题,但它不应该有所作为,涉及很多嵌套,最后的字典实际上是另一个字典的孩子,这是另一个字典的孩子!
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是我们的Primary SortedDictionary(这个问题的主题) openTrades是另一个SortedDictionary
由于 詹姆斯
答案 0 :(得分:8)
SortedDictionary
对键进行排序,而不是对值进行排序。
如果您执行以下操作
foreach(var item in dic)
{
Console.WriteLine(item.Key + "-" + item.Value);
}
您将看到它按键按排序顺序打印出来:
1-String 3
70-String 4
100-String 1
1113-String 2
答案 1 :(得分:1)
我不确定你认为输出应该是什么,但对我来说它是
String 3
String 4
String 1
String 2
哪个是对的。也许您认为SortedDictionary
维持广告订单的印象?快速查看the documentation会告诉您情况并非如此。这些值通过密钥上的Comparer<T>
进行排序(假设未提供自定义Comparer。)
答案 2 :(得分:1)
正如所有其他人的第一印象一样,如果字典按键而不是按值排序,则会感到困惑。但阅读你的评论似乎不是问题。
所以我(就像其他人一样)将代码粘贴到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]
因此,您将再次检查确切的密钥属于您获得的每个值,并可能找到另一条线索,为什么您会得到一个您不期望的排序。
答案 3 :(得分:0)
问题在于你的foreach循环。 SortedDictionary类公开值列表,但该列表未排序,因此您只是从未排序的列表中读取。
再次阅读代码,我意识到列表是按排序顺序显示的。我认为发生的事情是你感到困惑,因为你以某种方式预期它会对Value字段进行排序。 SortedDictionary通过Key字段(add语句中的整数)进行排序。