Neden Sözlük "emri"?
Burada birçok soruya cevap olarak bunu okudum. Ama tam olarak ne anlama geliyor?
var test = new Dictionary<int, string>();
test.Add(0, "zero");
test.Add(1, "one");
test.Add(2, "two");
test.Add(3, "three");
Assert(test.ElementAt(2).Value == "two");
Yukarıdaki kod beklendiği gibi çalışmıyor. Ne şekilde bir sözlük sırasız olarak kabul edilir? Hangi şartlar altında yukarıdaki kod başarısız olabilir?
CEVAP
Öncelikle bu beklediğiniz olmadığı belli değilekleme-siparişyaanahtar siparişi. Örneğin, eğer yazarsan sonucu ne beklenir ki:
var test = new Dictionary<int, string>();
test.Add(3, "three");
test.Add(2, "two");
test.Add(1, "one");
test.Add(0, "zero");
Console.WriteLine(test.ElementAt(0).Value);
Beklersiniz "üç" veya ""? sıfır
Olduğu gibi, bendüşünüyorumgeçerli uygulama ekleme hiç bir şey silmek sürece sipariş - ama seni korurbu güvenin gerekir. Uygulama ayrıntı var ve bu gelecekte değişebilir.
Silmeleri de bu etkiler. Örneğin, bu programın sonucu ne beklenir ki?
using System;
using System.Collections.Generic;
class Test
{
static void Main()
{
var test = new Dictionary<int, string>();
test.Add(3, "three");
test.Add(2, "two");
test.Add(1, "one");
test.Add(0, "zero");
test.Remove(2);
test.Add(5, "five");
foreach (var pair in test)
{
Console.WriteLine(pair.Key);
}
}
}
Aslında (kutudan) 3, 5, 1, 0. 5 için yeni giriş boşalan girişi daha önce 2 tarafından kullanılır. Bu da olsa garantili değil.
Ne sözlüğün temel depolama genişletilmiş gerektiğinde () etkiliyor olabilir... farklı farklı şeyler yapıyorlar.
Sadece düzenli bir koleksiyon gibi davranma. Bunun için tasarlanmış değil. Şimdi Eğer iş olursa bile, bu sınıfın amacı aleyhinde bir belgelenmemiş bir davranış güvenerek konum.
Neden listesi't güvenli "al&...
Neden baskı "B" baskı " ...
Neden bu kod rastgele dizeleri yazdırm...
Neden &; ad std quot;" kötü olara...
Neden[[]]yok[ []] [ []] dize " dön...