And*_*ndy 4 .net c# dictionary
我知道字典的顺序是未定义的,MSDN如此说:
出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair结构.返回项的顺序未定义.
这很好,但是如果我有两个字典的实例,每个都有相同的内容,那么顺序是否相同?
我猜是这样的,因为据我所知,顺序是由键的哈希决定的,如果两个词典具有相同的键,它们具有相同的哈希值,因此顺序相同...
... 对?
谢谢!
安迪.
不,不能保证是同一个订单.想象一下,您在Dictionary<TKey, TValue>
具有相同哈希码的几个项目中的情况.如果它们以不同的顺序添加到两个词典中,则会导致枚举中的顺序不同.
例如,考虑以下(符合相等的)代码
class Example
{
public char Value;
public override int GetHashCode()
{
return 1;
}
public override bool Equals(object obj)
{
return obj is Example && ((Example)obj).Value == Value;
}
public override string ToString()
{
return Value.ToString();
}
}
class Program
{
static void Main(string[] args)
{
var e1 = new Example() { Value = 'a' };
var e2 = new Example() { Value = 'b' };
var map1 = new Dictionary<Example, string>();
map1.Add(e1, "1");
map1.Add(e2, "2");
var map2 = new Dictionary<Example, string>();
map2.Add(e2, "2");
map2.Add(e1, "1");
Console.WriteLine(map1.Values.Aggregate((x, y) => x + y));
Console.WriteLine(map2.Values.Aggregate((x, y) => x + y));
}
}
Run Code Online (Sandbox Code Playgroud)
运行该程序的输出是
12
21
Run Code Online (Sandbox Code Playgroud)