Mag*_*nus 6 c# dictionary .net-7.0
I\xe2\x80\x99ve 总是假设 aDictionary不保留添加项目的顺序。\n那么为什么这似乎总是正确的?
internal class Program\n{\n public static void Main()\n {\n var d = new Dictionary<int, int>();\n var l = new List<int>();\n var r = new Random();\n\n for (int i = 1; i < 100_000; i++)\n {\n var j = r.Next();\n if (!d.ContainsKey(j))\n {\n d.Add(j, 1);\n l.Add(j);\n }\n }\n\n Console.WriteLine(d.Select(kvp => kvp.Key).SequenceEqual(l));\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
can*_*on7 12
如果没有删除任何项目,当前的实现将保留插入顺序。然而,这并不能保证将来仍然如此。
请参阅例如文档:
中的值的顺序
Dictionary<TKey,TValue>.ValueCollection未指定
例如:
var dict = new Dictionary<string, string>();
dict.Add("A", "A");
dict.Add("B", "B");
dict.Remove("A");
dict.Add("C", "C");
Console.WriteLine(string.Join(" ", dict.Values)); // C B
Run Code Online (Sandbox Code Playgroud)
(字典将键和值存储在条目数组中,迭代顺序是数组中条目的顺序。通常,项目会附加到数组中。但是,如果删除某个项目,则会创建一个空条目的链表新的插入被添加到第一个空条目中:这可以避免在删除条目时复制周围的所有内容。这会导致“C”被添加到第一个空条目中,该条目是在删除“A”时留下的。当然,这只是当前的实现,可能随时更改。)