如果我在字典中添加值,然后在代码中添加,我想使用以下命令将该字典转换为数组:
myDictionary.Values.ToArray()
Run Code Online (Sandbox Code Playgroud)
阵列会按照我输入的顺序出现吗?还是在某个阶段排序?
Hen*_*man 13
如果您希望对值进行排序(在Key上),那么您应该使用a SortedDictionary<K,V>或aSortedList<K,V>
对于普通字典,值的顺序依赖于实现,但您可以假设它是随机的.
输入的顺序丢失了.
Igo*_*aka 10
返回值的顺序很可能(但不保证)与存储密钥的顺序相同.正如Henk Holterman所说,这是特定于实现的,不应该依赖它.
字典的MSDN条目非常明确:
出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair结构.返回项的顺序未定义.
EDIT 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);
}
Run Code Online (Sandbox Code Playgroud)
如果仔细查看代码,您将看到字典中元素的顺序不是添加元素的顺序,而是最初添加元素的顺序.
我不想想想随着时间的推移多次插入和删除会发生什么.如果你依赖这种无证行为,我认为你将欠世界相当于美国国债的不良代码抵消.
| 归档时间: |
|
| 查看次数: |
5658 次 |
| 最近记录: |