2009-04-07 17 views
9

Considere tengo una matriz,cómo asignar valores de la matriz en tiempo de ejecución

int[] i = {1,2,3,4,5}; 

valores Aquí he asignado para ello. Pero en mi problema obtengo estos valores solo en tiempo de ejecución. ¿Cómo puedo asignarlos a una matriz.

Por ejemplo:

puedo obtener el tamaño máximo de la matriz a partir de usuario y los valores a ellos ahora cómo los asigno a la int array [].

¿O puedo utilizar otros tipos de datos como ArrayList, etc. que puedo convertir a Int [] al final?

Respuesta

17

Bueno, el más fácil es utilizar List<T>:

List<int> list = new List<int>(); 
list.Add(1); 
list.Add(2); 
list.Add(3); 
list.Add(4); 
list.Add(5); 
int[] arr = list.ToArray(); 

De lo contrario, es necesario asignar una matriz de tamaño adecuado y establecer a través del indexador.

int[] arr = new int[5]; 
arr[0] = 1; 
arr[1] = 2; 
arr[2] = 3; 
arr[3] = 4; 
arr[4] = 5; 

Este segundo enfoque no es útil si no se puede predecir el tamaño de la matriz, ya que es caro para reasignar la matriz cada vez que se agrega un elemento; a List<T> utiliza una estrategia de duplicación para minimizar las reasignaciones requeridas.

+0

obj.myIntArray = (nueva lista {1,2}). ToArray(); – lamarant

+0

¿No hay forma de usar "{1,2,3,4,5}"? – Xonatron

+1

@ Xonatron sí, se han agregado inicializadores de recopilación en los últimos 7 años, consulte el comentario de lamarant. Sin embargo, si los valores son conocidos en tiempo de compilación, puede ir directamente a una matriz * de todos modos * –

7

Use List<int> y luego llame al ToArray() al final para crear una matriz. ¿Pero usted realmente necesita una matriz? En general, es más fácil trabajar con otros tipos de colecciones. Como escribió Eric Lippert, "arrays considered somewhat harmful".

Usted puede hacerlo de forma explícita, sin embargo, como esto:

using System; 

public class Test 
{ 
    static void Main() 
    { 
     int size = ReadInt32FromConsole("Please enter array size"); 

     int[] array = new int[size]; 
     for (int i=0; i < size; i++) 
     { 
      array[i] = ReadInt32FromConsole("Please enter element " + i); 
     } 

     Console.WriteLine("Finished:"); 
     foreach (int i in array) 
     { 
      Console.WriteLine(i); 
     } 
    } 

    static int ReadInt32FromConsole(string message) 
    { 
     Console.Write(message); 
     Console.Write(": "); 
     string line = Console.ReadLine(); 
     // Include error checking in real code! 
     return int.Parse(line); 
    } 
} 
+0

De acuerdo. Casi nunca utilizo matrices ahora que las listas genéricas son tan fáciles de usar. – Wedge

0

Si desea una matriz, cuyo tamaño varía durante la ejecución, entonces debe usar otra estructura de datos. Una lista genérica servirá. Luego, puede agregarle elementos dinámicamente.

Editar: Marc publicó su respuesta mientras escribía la mía. Esto fue exactamente lo que quise decir.

+0

mismo aquí, así que eliminé el mío –

6

¿Quieres decir?

int[] array = { 1, 2, 3, 4, 5 }; 
array = new int[] { 1, 3, 5, 7, 9 }; 
array = new int[] { 100, 53, 25, 787, 39 }; 
array = new int[] { 100, 53, 25, 787, 39, 500 }; 
+0

¿Cómo no es esta la mejor respuesta? – Xonatron

0

Se podía utilizar la línea de abajo en lugar de llamar a una función separada:

using System; 

public class Test 
{ 
    static void Main() 
    { 
     Console.WriteLine("Please enter array size"); 
     int size = Convert.ToInt32(Console.ReadLine()); 

     int[] array = new int[size]; 
     for (int i=0; i < size; i++) 
     { 
      Console.WriteLine("Please enter element " + i); 
      array[i] = Convert.ToInt32(Console.ReadLine()); 
     } 

     Console.WriteLine("Finished:"); 
     foreach (int i in array) 
     { 
      Console.WriteLine(i); 
     } 
    } 
Cuestiones relacionadas