2011-02-23 19 views
13

Array.Clear(), varsayılan değeri (tamsayılar için sıfır) ile dizileri doldurur, örneğin -1 ile doldurmak istiyorum.Diziyi belirli bir değerle nasıl hızlı bir şekilde doldurabilirim?

Teşekkürler.

+2

Bu soru etkili bir aynı şeyi sorar (orada beri C# ile ilgili özel bir şey değildir): [Bir C# dizisini tek bir değerle doldurma/sunma?] (http://stackoverflow.com/q/1014005/145173) –

+0

Evet, yukarıdaki bağlantıya bakın (özellikle http: //stackoverflow.com/a/19727083/20 32514) çünkü burada cevaplar ('Enumerable.Repeat' ve' '' 'basit '' kullanarak) 'hızlı' olarak nitelendirilmez. Bayt dizileri için bkz. Http://stackoverflow.com/a/25808955/2032514 – 0xF

cevap

16

diğer yoludur:

int[] arr = Enumerable.Repeat(-1, 10).ToArray(); 
Console.WriteLine(string.Join(",",arr)); 
+0

+1: Kendi yanıtımdan daha fazlasını seviyorum. –

+1

Bu, yazılması gereken kod miktarı açısından etkindir. Ama bunun basit bir döngü ile sonuçlandığını düşünüyorum. 'Buffer' sınıfının neden bir çeşit Fill yöntemi olmadığını anlamıyorum. –

+3

Sadece 'Enumerable.Repeat' kullanmak, .NET seviyesindeki her elemanın (her erişim için sınır dizisi anlamına gelir) yinelemesini yapmakla kalmaz,' ToArray' IEnumerable'ın boyutunu bilmez, dolayısıyla tahmin etmesi gerekir dizi büyüklüğüne göre. Bu, ToArray'ın arabelleği aşıldığında her zaman dizi ayırmalarının yanı sıra, kırpma için sonunda bir daha ayırma yapacağınız anlamına gelir. –

3

Böyle bir yöntemin farkında değilim. Bununla birlikte, bir kendini yazabilirsiniz:

public static void Init<T>(this T[] array, T value) 
{ 
    for(int i=0; i < array.Length; ++i) 
    { 
     array[i] = value; 
    } 
} 

Böyle diyebilirsin:

int[] myArray = new int[5]; 
myArray.Init(-1); 
İlgili konular