2011-02-23 19 views
13

Array.Clear() llena las matrices con el valor predeterminado (cero para enteros), me gustaría llenarlo usando -1 por ejemplo.¿Cómo puedo llenar rápidamente una matriz con un valor específico?

Gracias.

+2

Esta pregunta es efectivamente lo mismo (ya que hay no es nada específico de C# al respecto): [¿Cómo rellenar/crear una instancia de una matriz de C# con un solo valor?] (http://stackoverflow.com/q/1014005/145173) –

+0

Sí, consulte el enlace anterior (especialmente http: //stackoverflow.com/a/19727083/20 32514) porque las respuestas aquí (usando 'Enumerable.Repeat' y simple' for') no califican como "rápidas". Para las matrices de bytes, consulte http://stackoverflow.com/a/25808955/2032514 – 0xF

Respuesta

16

La otra forma es:

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

+1: me gusta más que mi propia respuesta. –

+1

Esto es eficiente en términos de la cantidad de código que debe escribirse. Pero creo que resulta en un simple bucle. No entiendo por qué la clase 'Buffer' no tiene un método de relleno de algún tipo. –

+3

No solo el uso de 'Enumerable.Repeat' requiere iteración a través de cada elemento en el nivel .NET (lo que significa controles de límites de matriz para cada acceso),' ToArray' no conoce el tamaño de 'IEnumerable', por lo que tiene que adivinar en cuanto al tamaño de la matriz. Eso significa que obtendrá asignaciones de matriz cada vez que se exceda el búfer 'ToArray', más una asignación más al final para el ajuste. –

3

No conozco este método. Se puede escribir uno usted mismo, sin embargo:

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

se le puede llamar así:

int[] myArray = new int[5]; 
myArray.Init(-1); 
Cuestiones relacionadas