Pregunta

Tengo problemas para comprender el concepto de una matriz con más de dos dimensiones, por qué necesitaría una y cómo la usaría.

Por ejemplo, ¿cómo representaría los siguientes datos en una matriz multidimensional?

Sexo: Masculino | Mujer
Color de cabello: rubio | Morena | Negro
Color de ojos: azul | Marrón | Verde | Hazel

Instinct me dice que debería crear una matriz así:

cadena [,,] personAttributes = nueva cadena [2,3,4]

Muestre cómo llenaría esta matriz sin un bucle y luego con un bucle. Cualquier expansión en conceptos y uso apreciada.

¿Fue útil?

Solución

No voy a tocar tu persona Ejemplo de atributos porque no creo que una matriz 2D sea una buena idea, y mucho menos 3D (personalmente usaría una matriz de estructuras).

Sin embargo, las matrices multidimensionales son muy útiles cuando tiene algún tipo de espacio de datos ortogonales (es decir, tiene varias `` opciones '' que son independientes entre sí).

Por ejemplo, si está almacenando los tiempos de respuesta de 20 personas en más de 10 pruebas, donde cada prueba se repite 3 veces, y todo se hace una vez al mes durante 12 meses, puede tener una matriz como esta:

double[,,,] responseTime = new double [12,20,10,3];

Otros consejos

A riesgo de sonar trillado, utiliza matrices de tres o más dimensiones cuando tiene tres o más dimensiones de datos. Así que supongo que tienes problemas para imaginar tres dimensiones de datos.

¿Qué tal 3-D Tic Tac Toe ? Cualquier representación discreta de datos tridimensionales se ajusta a esta categoría.

En cuanto a atributos como el color del cabello, etc., no usaría una matriz multidimensional para esto. Use objetos con propiedades para eso y enumeraciones (por ejemplo, género como enumeración) según corresponda. Eso será mucho más legible que una matriz N-dimensional.

Diría en su ejemplo que una matriz multidimensional no tiene sentido. Una clase tiene mucho más sentido en tu situación. Algo así como una enumeración almacenada como una variable miembro sería una forma de ir:

enum HAIRCOLORS { BROWN = 0, BLOND = 1 ..... };
enum SEX { FEMALE = 0, MALE = 1 };
enum EYECOLORS { GREEN, BLUE, RED .... };

class PersonAttributes 
{
    public SEX sex = SEX.Female;
    public HAIRCOLORS hairColor = HAIRCOLORS.Brown;
    public EYECOLORS eyeColor = EYECOLORS.Green;
};

etc ...

Para modelar estructuras de datos que tienen múltiples dimensiones. Un tablero de ajedrez es un buen ejemplo, 1 dimensión es para el rango, la otra es para el archivo.

Dado que las categorías de datos en su ejemplo (género, color de ojos, color de cabello) no tienen relación con otras categorías, parece que esto se representaría mejor como 3 matrices diferentes, cada una con 1 dimensión.

Si desea realizar un bucle sobre una matriz multidimensional, simplemente use un bucle dentro de un bucle:

for (int i = 0; i < array.length; i++) {
   for (int j = 0; j < array[0].length; j++) {
      string data = array[i][j];
      // do something with the data
   }
}

Pensar en una matriz como una dirección puede ser útil.

123 Main St Springfield MA

Usando este ejemplo, mi primera matriz sería una matriz de estados. Cada estado tendría una variedad de ciudades, que las ciudades tienen calles y finalmente las calles tienen direcciones individuales.

Con esta matriz, podríamos crear fácilmente una lista de correo con cada dirección. Simplemente recorra cada conjunto y podrá imprimir cada dirección o lo que sea que necesite hacer.

Mirando su ejemplo, no veo que las matrices multidimensionales sean una buena opción. A menos que lo principal que desee hacer con sus matrices sea encontrar subconjuntos de sus datos, como las personas que son mujeres / ojos rubios / azules. Seguiría la sugerencia de usar una clase. Cuando esté mirando un objeto persona en una matriz, necesitará conocer los valores de índice que apuntan a esa persona para descubrir esas características.

Otro ejemplo que podría ser útil es la internacionalización de mensajes en una aplicación. Las matrices pueden ser idioma, estado (error, advertencia, información), identificación del mensaje (una serie de cadenas de mensajes).

En cuanto al llenado de las matrices, solo se podrían usar algunos bucles si se ordenaran los datos. De lo contrario, analice los datos de entrada para identificar los índices apropiados.

Como escribieron los demás, su ejemplo no se adapta bien a una matriz 3D. Su ejemplo parece más apropiado para una estructura de datos 2D. Un índice es personas, el otro índice es la característica: sexo, color de cabello, color de ojos. O podría usar alguna otra estructura de datos ...

Un ejemplo simple de una matriz 3D: considerando almacenar un black & amp (sin comprimir); película digital blanca Cada cuadro es una imagen 2D X vs Y con valores de intensidad: imagen (i, j). Ahora, para tener múltiples cuadros para tener una película, puede almacenar la película como imágenes (i, j, k), donde k cambia con el tiempo. Si la película estaba en color, podría agregar una cuarta dimensión para almacenar tres colores primarios: imágenes (i, j, q, k), q = 1,2,3 y tener una matriz 4D.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top