Pergunta

Estou tendo problemas envolvendo minha cabeça em torno do conceito de uma matriz com mais de duas dimensões, por que você precisa de um, e como você poderia usá-lo.

Por exemplo, como é que você vai fazer sobre representando os seguintes dados em uma matriz multidimesional?

Sexo: Masculino | feminino
Cor do cabelo: Loiro | brunette | preto
Cor dos olhos: Azul | Brown | verde | Hazel

O instinto me diz que eu deveria criar uma matriz assim:

string[,,] personAttributes = new string[2,3,4]

Por favor, mostre como você você iria encher-se essa matriz sem loop, e depois com um loop. Qualquer expansão em conceitos e uso apreciado.

Foi útil?

Solução

Eu não vou tocar o seu personAttributes exemplo, porque eu não acho que uma matriz 2D é uma boa idéia, e muito menos 3D (pessoalmente eu usaria uma matriz de estruturas).

No entanto, arrays multidimensionais são muito úteis quando você tem algum tipo de espaço de dados ortogonal (ou seja, você tem várias "escolhas" que são independentes um do outro).

Por exemplo, se você está armazenando os tempos de resposta de 20 pessoas com mais de 10 testes, onde cada teste é repetido 3 vezes, ea coisa toda é feito uma vez por mês, durante 12 meses, você pode ter uma matriz como este:

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

Outras dicas

Correndo o risco de soar banal, você usa matrizes de três ou mais dimensões quando você tem três ou mais dimensões de dados. Então eu acho que você tendo problemas Prevendo três dimensões de dados.

Como sobre 3-D Tic Tac Toe ? Qualquer representação discreta de ajustes de dados tridimensionais nesta categoria.

Quanto aos atributos como cor do cabelo e assim por diante, eu não iria usar um array multi-dimensional para isso. Uso objetos com propriedades para que e enumerações (por exemplo, género como uma enumeração), conforme apropriado. Isso vai ser muito mais legível do que um conjunto N-dimensional.

Eu diria que no seu exemplo um array multi-dimensional não faz sentido. Uma classe faz muito mais sentido na sua situação. Algo como uma enumeração armazenado como uma variável de membro seria uma maneira você poderia 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 estruturas de dados modelo que têm múltiplas dimensões. Um tabuleiro de xadrez é um bom exemplo, uma dimensão é para classificação, o outro é para o arquivo.

Uma vez que as categorias de dados no seu exemplo (sexo, cor dos olhos, cor do cabelo) não têm nenhuma relação com outras categorias, parece que isso seria melhor representada como 3 matrizes diferentes, cada um com 1 dimensão.

Se você quiser varrer uma matriz multi-dimensão, você simplesmente usar um loop dentro de um loop:

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
   }
}

Pensando em uma matriz como um endereço pode ser útil.

123 Main St Springfield MA

Usando este exemplo, a minha primeira matriz seria uma série de estados. Cada estado iria realizar uma série de cidades, de cidades detém ruas e, finalmente, ruas detém endereços individuais.

Com essa matriz que poderia facilmente criar uma lista de discussão com cada endereço. Loop, apenas através de cada matriz e você seria capaz de imprimir todos os endereços ou qualquer outra coisa que você precisa fazer.

Olhando para o seu exemplo, não vejo arrays multidimensionais como um bom ajuste. A menos que a principal coisa que você quer fazer com suas matrizes é encontrar subconjuntos de seus dados, como as pessoas que são do sexo feminino / Louro / olhos azuis. Gostaria de seguir a sugestão de usar uma classe. Quando você está olhando para um objeto pessoa em uma matriz você está indo para necessidade de saber os valores de índice que apontam para que a pessoa a descobrir essas características.

Outro exemplo que pode ser útil é a internacionalização de mensagens em um aplicativo. As matrizes podem ser linguagem, estado (erro, aviso info), ID de mensagem (uma mensagem de gama cordas).

Como para o preenchimento das matrizes, apenas alguns loops poderia ser usado se os dados foi resolvido. Caso contrário, analisar os seus dados de entrada para identificar os índices apropriados.

Como os outros escreveu, o seu exemplo não bem adaptado para uma matriz 3D. O seu exemplo parece mais apropriado para uma estrutura de dados 2D. Um índice é pessoas, o outro índice é a característica: sexo, cor do cabelo, cor dos olhos. Ou você poderia usar alguma outra estrutura de dados ...

Um exemplo simples de uma matriz 3D: Considerando armazenar um filme digital (não comprimido) a preto e branco. Cada quadro é uma imagem 2D X vs Y com valores de intensidade: imagem (i, j). Agora ter vários quadros para ter um filme que você pode armazenar o filme como imagens (i, j, k), onde k muda ao longo do tempo. Se o filme foi na cor, você pode adicionar uma quarta dimensão para armazenar três cores primárias:. Cimages (i, j, q, k), q = 1,2,3, e têm uma matriz 4D

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top