2012-05-21 19 views
29
longitud

me gusta crear un int[] con la longitud X y valorarlo con [0,1,2 .... X]Crear C# int [] con valor como 0,1,2,3 ...

por ejemplo

public int[] CreateAA(int X){}

int[] AA = CreateAA(9) => [0,1,2,3,4,5,6,7,8,9]

¿Hay algún método fácil? O tiene que iterar e iniciar el valor

+0

duplicado posible de [Cómo crear matriz con secuencia de enteros en C#?] (Http://stackoverflow.com/questions/4588787/how-to-create-array -with-sequence-of-integers-in-c) –

Respuesta

57

Puede aprovechar la funcionalidad de IEnumerable.

int[] arr = Enumerable.Range(0, X+1).ToArray(); 

Esto creará una lista IEnumerable para usted y .ToArray() va a satisfacer su necesidad int matriz.

Así que para X = 9 en su caso sería generar la matriz para [0,1,2,3,4,5,6,7,8,9] (como sea necesario)

4

Por qué hacer una función cuando ya está allí.

Para este ejemplo específico, utilice

int[] AA = Enumerable.Range(0, 10).ToArray(); 

donde 0 is the starting value y 10 (X + 1) is the length of array

Así que un general aplicable a todos

int[] AA = Enumerable.Range(0, X + 1).ToArray(); 
+0

Debe ser 'Enumerable.Range (0, X + 1)' ya que el segundo parámetro es 'Count' –

+0

Nota: Si' X' es '9', entonces usted necesita usar 'Enumerable.Range (0, X + 1)' para obtener los números del 0 al 9. – Guffa

+1

Error de compilación incorrecto, devuelve iEnumerable not array – V4Vendetta

2

con la función y el bucle:

static int[] f(int X) 
{ 
    int[] a = new int[X+1]; 
    for(int i = 0; i < a.Length; i++) 
     a[i] = i; 
    return a; 
} 
+1

respuestas más optimizadas se publican arriba. – vaibhav

+3

@vaibhav Respuestas más concisas para asegurarse de usar 'Enumerable.Range'. ¿Será eso necesariamente más optimizado? Dicho esto, este código no se compila. –

+0

bueno, eso depende del uso del código, señor – vaibhav

1

Para completar, aquí es una función que crea una formación.

I hizo un poco más versátil al tener parámetros para el min y el valor máximo, es decir CreateArray(0, 9) rendimientos {0,1,2,3,4,5,6,7,8,9}.

static int[] CreateArray(int min, int max) { 
    int[] a = new int[max - min + 1]; 
    for (int i = 0; i < a.Length; i++) { 
    a[i] = min + i; 
    } 
    return a; 
} 
6

Usando Enumerable.Range(0, 10).ToArray() es muy concisa pero si desea crear un arsenal muy grande el método ToArray extensión tendrá que recoger los números en un búfer que tendrán que ser reasignados en múltiples ocasiones. En cada reasignación, el contenido del búfer se copia al nuevo búfer más grande. .NET usa una estrategia donde el tamaño del búfer se duplica en cada reasignación (y el búfer inicial tiene cuatro elementos).

lo tanto, si se quiere evitar múltiples reasignaciones del buffer es necesario crear la matriz de antemano:

int[] aa = new int[10]; 
for (var i = 0; i < aa.Length; i += 1) 
    aa[i] = i; 

Ésta es la forma más eficiente de la inicialización de la matriz.

Sin embargo, si necesita una matriz de digamos 100.000,000 números consecutivos, entonces debe mirar un diseño donde no tenga que mantener todos los números en una matriz para evitar el impacto de los requisitos de memoria. IEnumerable<int> es muy útil para este propósito porque no tiene que asignar toda la secuencia pero puede producirla mientras itera y eso es exactamente lo que hace Enumerable.Range. Por lo tanto, evitar el conjunto de números consecutivos en primer lugar puede ser incluso mejor que pensar en cómo crearlo.

1

Para inicializar probar este

int x = 10; 
Enumerable.Range(0, x) 
      .Select((v, i) => v + i).ToArray(); 
Cuestiones relacionadas