有些时候在Dictionary中Add添加键值对后,并不是直接加到Dictionary的最后面,遍历时元素的顺序不是元素添加的先后顺序。

因为字典Dictionary并不是有序存储的,在删除中间某个元素后,会留下一个空位,后续添加元素会填到这个空位,导致顺序“错乱”。

Dictionary实现原理参考:浅谈C# Dictionary实现原理

代码演示:Log结果显示,字典内元素顺序是"1,2,6,4,5",而不是"1,2,4,5,6"。

        Dictionary<int, string> testDic = new Dictionary<int, string>();

        testDic.Add(1, "111");
        testDic.Add(2, "222");
        testDic.Add(3, "333");
        testDic.Add(4, "444");
        testDic.Add(5, "555");

        testDic.Remove(3);
        testDic.Add(6, "666");

        foreach (var item in testDic)
        {
            Debug.Log(item.Value);
        }