two multidimensional jagged examples dimensional arreglo array c# arrays multidimensional-array

c# - jagged - Matriz multidimensional



multidimensional array c# examples (5)

En la primera instancia, está intentando crear lo que se llama una matriz irregular.

double[][] ServicePoint = new double[10][9].

La declaración anterior hubiera funcionado si se definiera como a continuación.

double[][] ServicePoint = new double[10][]

lo que esto significa es que está creando una matriz de tamaño 10, que puede almacenar 10 matrices de diferentes tamaños dentro de ella. En términos simples, una Matriz de matrices. Vea la imagen de abajo, que significa una matriz irregular.

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.80).aspx

El segundo es básicamente una matriz bidimensional y la sintaxis es correcta y aceptable.

double[,] ServicePoint = new double[10,9];//<-ok (2)

Y para acceder o modificar una matriz bidimensional, debe pasar ambas dimensiones, pero en su caso está pasando solo una dimensión, por eso el error

El uso correcto sería

ServicePoint[0][2] , se refiere a un elemento en la primera fila, tercera columna.

Representación pictórica de su matriz bidimensional.

double[][] ServicePoint = new double[10][9]; // <-- gives an error (1) double[,] ServicePoint = new double[10,9]; // <-- ok (2)

¿Cuál es su diferencia? (1) produce un error, ¿cuál es la razón?

Y

double d = new double[9] ServicePoint[0] = d;

el uso de (2) generará un error. ¿Por qué?


Una es una matriz de matrices y la otra es una matriz 2D. El primero puede ser irregular, el segundo es uniforme.

Es decir, un double[][] puede ser válidamente:

double[][] x = new double[5][]; x[0] = new double[10]; x[1] = new double[5]; x[2] = new double[3]; x[3] = new double[100]; x[4] = new double[1];

Debido a que cada entrada en la matriz es una referencia a una matriz de double . Con una matriz irregular, puede hacer una asignación a una matriz como desee en su segundo ejemplo:

x[0] = new double[13];

En el segundo elemento, debido a que es una matriz 2d uniforme, no puede asignar una matriz 1d a una fila o columna, porque debe indexar tanto la fila como la columna, lo que le lleva a un solo double :

double[,] ServicePoint = new double[10,9]; ServicePoint[0]... // <-- meaningless, a 2d array can''t use just one index.

ACTUALIZACIÓN :

Para aclarar según su pregunta, la razón por la que su número 1 tuvo un error de sintaxis es porque tuvo esto:

double[][] ServicePoint = new double[10][9];

Y no puede especificar el segundo índice en el momento de la construcción. La clave es que ServicePoint no es una matriz 2d, sino una matriz 1d (de matrices) y, por lo tanto, dado que está creando una matriz 1d (de matrices), usted especifica solo un índice:

double[][] ServicePoint = new double[10][];

Luego, cuando creas cada elemento en la matriz, cada uno de ellos también son matrices, entonces puedes especificar sus dimensiones (que pueden ser diferentes, de ahí el término matriz irregular ):

ServicePoint[0] = new double[13]; ServicePoint[1] = new double[20];

¡Espero que ayude!


double[,] es una matriz 2d (matriz), mientras que double[][] es una matriz de matrices ( matrices irregulares ) y la sintaxis es:

double[][] ServicePoint = new double[10][];


double[][] es una matriz de matrices y double[,] es una matriz. Si desea inicializar una matriz de matriz, deberá hacer esto:

double[][] ServicePoint = new double[10][] for(var i=0;i<ServicePoint.Length;i++) ServicePoint[i] = new double[9];

Tenga en cuenta que el uso de matrices de matrices le permitirá tener matrices de diferentes longitudes:

ServicePoint[0] = new double[10]; ServicePoint[1] = new double[3]; ServicePoint[2] = new double[5]; //and so on...


double[][] se denominan matrices irregulares . Las dimensiones internas no se especifican en la declaración. A diferencia de una matriz rectangular , cada matriz interna puede tener una longitud arbitraria. Cada matriz interna se inicializa implícitamente en nulo en lugar de una matriz vacía. Cada arreglo interno debe crearse manualmente: Referencia [C # 4.0 en pocas palabras La referencia definitiva]

for (int i = 0; i < matrix.Length; i++) { matrix[i] = new int [3]; // Create inner array for (int j = 0; j < matrix[i].Length; j++) matrix[i][j] = i * 3 + j; }

double[,] se denominan rectangular arrays , que se declaran utilizando comas para separar cada dimensión. El siguiente fragmento de código declara una matriz bidimensional rectangular de 3 por 3, inicializándola con números del 0 al 8:

int [,] matrix = new int [3, 3]; for (int i = 0; i < matrix.GetLength(0); i++) for (int j = 0; j < matrix.GetLength(1); j++) matrix [i, j] = i * 3 + j;