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

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • ICON

    ICON

    19 EKİM 2011
  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009