2009-02-14 26 views
35

Estoy intentando crear una matriz de matrices que va a utilizar los datos repetidos, algo parecido a continuación:C# Creación de una matriz de matrices

int[] list1 = new int[4] { 1, 2, 3, 4}; 
int[] list2 = new int[4] { 5, 6, 7, 8}; 
int[] list3 = new int[4] { 1, 3, 2, 1 }; 
int[] list4 = new int[4] { 5, 4, 3, 2 }; 

int[,] lists = new int[4, 4] { list1 , list2 , list3 , list4 }; 

no puedo conseguir que funcione, y estoy preguntándome si me estoy acercando a esto mal.

Lo que intento hacer es crear algún tipo de método para crear una lista larga si los valores así puedo procesarlos en un orden específico, repetidamente. Algo como,

int[,] lists = new int[90,4] { list1, list1, list3, list1, list2,(and so on)}; 

for (int i = 0,i < 90;++i) { 
    doStuff(lists[i]); 
} 

y hacer que las matrices pasen a doStuff() en orden. ¿Estoy haciendo esto completamente mal, o me estoy perdiendo algo por crear la matriz de matrices?

Respuesta

52

Lo que hay que hacer es esto:

int[] list1 = new int[4] { 1, 2, 3, 4}; 
int[] list2 = new int[4] { 5, 6, 7, 8}; 
int[] list3 = new int[4] { 1, 3, 2, 1 }; 
int[] list4 = new int[4] { 5, 4, 3, 2 }; 

int[][] lists = new int[][] { list1 , list2 , list3 , list4 }; 

Otra alternativa sería la creación de un tipo List<int[]>:

List<int[]> data=new List<int[]>(){list1,list2,list3,list4}; 
+1

¿Cómo creo una matriz vacía de matrices con un tamaño fijo? Las matrices individuales almacenadas dentro de la matriz pueden variar, pero habrá una cantidad fija de matrices dentro de la matriz maestra. –

5

El problema es que usted está tratando de definir los elementos de las listas de listas múltiples (no múltiples entradas como se define). Deberías estar definiendo listas como esta.

int[,] list = new int[4,4] { 
{1,2,3,4}, 
{5,6,7,8}, 
{1,3,2,1}, 
{5,4,3,2}}; 

También puede hacer

int[] list1 = new int[4] { 1, 2, 3, 4}; 
int[] list2 = new int[4] { 5, 6, 7, 8}; 
int[] list3 = new int[4] { 1, 3, 2, 1 }; 
int[] list4 = new int[4] { 5, 4, 3, 2 }; 

int[,] lists = new int[4,4] { 
{list1[0],list1[1],list1[2],list1[3]}, 
{list2[0],list2[1],list2[2],list2[3]}, 
etc...}; 
3

Creo que puede estar buscando Jagged Arrays, que son diferentes de matrices multidimensionales (como se está utilizando en su ejemplo) en C#. La conversión de las matrices en sus declaraciones a matrices irregulares debería hacer que funcione. Sin embargo, igual necesitará usar dos bucles para iterar sobre todos los elementos en la matriz dentada 2D.

+0

El enlace en su respuesta simplemente redirige a una página sobre "El nuevo Surface Pro". –

+0

Esta publicación tiene 8 años ... ¡Creo que se espera que Linkrot! – Noldorin

+1

Aquí hay un documento de MSDN actualizado sobre arreglos dentados] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays) –

Cuestiones relacionadas