如果我正在向字典中添加值,然后在代码的其他地方,我希望使用以下方法将该字典转换为数组:
myDictionary.Values.ToArray()
这个数组会按照我输入的顺序排列吗?还是在某个阶段进行了排序?
myDictionary.Values.ToArray()
这个数组会按照我输入的顺序排列吗?还是在某个阶段进行了排序?
SortedDictionary<K,V>
或SortedList<K,V>
。Dictionary
转换成 SortedDictionary
: new SortedDictionary<k, v>(existingDictionary);
- Senura Dissanayake返回值的顺序很可能(但不保证)与键存储的顺序相同。正如Henk Holterman所提到的,这是具体实现的,不能依赖。
MSDN词典条目非常明确地指出了这一点:
为了枚举,在字典中的每个项被视为表示值和其键的KeyValuePair结构。返回项目的顺序未定义。
编辑 Dictionary可能会让您产生一种错误的安全感,因为它似乎按照添加顺序返回值,但是下面的通过测试证明它的行为实际上更加微妙:
[TestMethod]
public void TestDictionary()
{
var dictionary1 = new Dictionary<int, int>();
var dictionary2 = new Dictionary<int, int>();
for(int i = 0; i < 10; i++){
dictionary1[i] = i;
if (i != 3)
dictionary2[i] = i;
}
dictionary1.Remove(3);
dictionary1[3] = 3;
dictionary2[3] = 3;
CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, dictionary1.Values);
CollectionAssert.AreEqual(new[] { 0, 1, 2, 4, 5, 6, 7, 8, 9, 3 }, dictionary2.Values);
}
myDictionary
是Dictionary<K,V>
类型,则顺序与Keys
使用的顺序相同,否则未定义。特别地,不能保证是插入顺序、任何有用的顺序或者在同一应用程序的不同运行中是相同的顺序。
Dictionary.ValueCollection
中值的顺序是未指定的,但与由Keys属性返回的Dictionary.KeyCollection
中相关键的顺序相同。