2010-12-02 26 views
7

C# newbie sorusu var. Aşağıdaki ikisinden de iyi uygulama nedir? ... ve liste diziden daha mı yavaş mı daha hızlı mı?Liste dizilerini kullanma - En iyi yöntemler

 //Method 1 
     int[] i_array = { 2, 0, 110, 53455, 2223 }; 

     if (someBolean) 
     { 
      Array.Resize(ref i_array, i_array.Length + 1); 
      i_array[i_array.Length - 1] = someIntValue; 
     } 

     //Method 2 
     var i_list = new List<int>(); 
     i_list.AddRange(new int[] { 2, 0, 110, 53455, 2223 }); 

     if (someBolean) 
      i_list.Add(someIntValue); 
+1

Diziyi sürekli olarak yeniden boyutlandırırsanız, yöntem 2'de listeyi de kullanabilirsiniz. –

+0

Yapmanın zor olduğunu biliyorum, ancak bu aşama öğrenme eğrisinde, performanstan endişe etmeyin * performans bir sorun *. Http://stackoverflow.com/questions/211414/is-premature-optimization-really-the-root-of-all-evil –

cevap

5

Daha sonra değişken boyutlu koleksiyonlar için en iyi uygulama olarak kabul edilir.

Kullandığınız toplama türüne bağlı olarak, Framework sınıfı, ilk örneğinizde yaptığınız işe benzer bir şey yapacaktır (bir öğeyle yeniden boyutlandırmak yerine, daha büyük bir boyuta göre artış gösterecektir) eleman eklemeye devam etmek için ekstra tampon alanınız var). Genelde, yine de, tekerleği yeniden icat etmek istemezsiniz. Çerçeve, değişken büyüklükte bir ton toplama sınıfı sağlar. Kendi yazınızı yazmak yerine bunları kullanın.

+0

için bu soruya bakın. Daha büyük bir boyuta katlanacağından şüpheleniyorum. Listeleri kullanacağım. – GuruMeditation

3

Bir liste dahili olarak bir dizi kullanır, bu yüzden bu ikisinin performansının aynı olmasını beklerim.

Listelerle programlanırken hata yapmak çok zor, bu yüzden çoğu zaman listeleri tercih ederim.

11

Büyümek veya küçültebilen bir koleksiyona ihtiyacınız olduğunda listeleri kullanın.

Uzunluğu biliyorsanız ve değiştirmek istemiyorsanız dizileri kullanın.


Bir liste başlatmak için collection initializers kullanabilirsiniz, bu nedenle bir dizi başlatılırken benzer bir sözdizimi olsun: Her ikisine de benzer işlemler gerçekleştirmek, böylece

var list = new List<int> { 2, 0, 110, 53455, 2223 }; 

if (someBoolean) 
{ 
    list.Add(someIntValue); 
} 
+0

Teşekkürler. Onları böyle başlatabileceğini bilmiyordum. – GuruMeditation

0

Hem IEnumerables olarak bulursunuz. Listenin yararı Justin Niessner'in dediği gibi, büyüklükte koleksiyonlar. Ayrıca, bir dizinin yeniden boyutlandırılması çerçevenin belleği yeniden tahsis etmesini gerektirir; Liste birleştirilmiş liste olarak davranır, sadece koleksiyondan öğe ekleme veya çıkarma.

İlgili konular