Bulduğum en hızlı yöntem, kopyanın her seferinde iki katına çıkarılmasıyla birlikte Array.Copy yazılımını kullanır. tek bir değer veya bir değer dizisi olan dizi
20.000.000 dizi öğeyle yaptığım testte, bu işlev for döngüsünden iki kat daha hızlıdır.
using System;
namespace Extensions
{
public static class ArrayExtensions
{
public static void Fill<T>(this T[] destinationArray, params T[] value)
{
if (destinationArray == null)
{
throw new ArgumentNullException("destinationArray");
}
if (value.Length >= destinationArray.Length)
{
throw new ArgumentException("Length of value array must be less than length of destination");
}
// set the initial array value
Array.Copy(value, destinationArray, value.Length);
int arrayToFillHalfLength = destinationArray.Length/2;
int copyLength;
for(copyLength = value.Length; copyLength < arrayToFillHalfLength; copyLength <<= 1)
{
Array.Copy(destinationArray, 0, destinationArray, copyLength, copyLength);
}
Array.Copy(destinationArray, 0, destinationArray, copyLength, destinationArray.Length - copyLength);
}
}
}
Ben http://coding.grax.com/2011/11/initialize-array-to-value-in-c-very.html bu konuda blogged ve http://coding.grax.com/2014/04/better-array-fill-function.html
farklı şekillerde bir çift, bu adam daha yaygın olanlarından birkaç tane dışarı listeye aldı - ve o kriter kendisine bile nezaketini: http://www.dotnetperls.com/initialize-array İlkel olsalar bile, bellekte 200K'lık öğeler tutmak büyük bir yığın bellek yiyor - ne yapıyorsunuz? zaman erişim (ürün başına)? – debracey
Çoğaltılamaz bir soru olamazdı, o diziyle diziye intialize etmek istediğini söylemedi, bir valeu – user613326