在審查一個應用程序的代碼時,我發現它假定Dictionary.Values
的順序與添加到集合中的元素相同。是否保證Dictionary.Values按照添加的順序返回元素?
我寫的應用程序進行測試,如果這是真的:
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, int> values = new Dictionary<string, int>();
values.Add("apple2", 2);
values.Add("apple3", 3);
values.Add("apple4", 4);
values.Add("apple5", 5);
values.Add("apple6", 6);
values.Add("apple1", 1);
var list = new List<int>(values.Values);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
}
}
}
和輸出是:
所有的2
3
4
5
6
1
首先,我不知道這怎麼可能。不是字典應該使用無序樹或類似的東西?
此外MSDN指出:
的值的順序在
Dictionary<TKey, TValue>.ValueCollection
是不確定的,但它是相同的順序在Dictionary<TKey, TValue>.KeyCollection
所述相關聯的密鑰由密鑰屬性返回。
那麼,爲什麼MSDN告訴「訂單未指定」,但實施恰巧保持秩序?我是否正確,我最好不要依賴這個事實?
它說,'ValueCollection'是在同一順序爲'KeyCollection' ...但你不知道爲了什麼'KeyCollection'是在(即你不知道這是否是相同的順序如何插入)。 換句話說,如果你插入: (1,a),(2,b),(3,c) 規範只是說如果'KeyCollection'返回(2,3,1)然後'ValueCollection'將返回(b,c,a) – rliu