SORU
17 HAZİRAN 2011, Cuma


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
17 HAZİRAN 2011, Cuma


Ö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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • Pepsi

    Pepsi

    1 Kasım 2005