Domanda

Ho problemi a avvolgere la testa attorno al concetto di un array con più di due dimensioni, perché ne avresti bisogno e come lo useresti.

Ad esempio, come rappresenteresti i seguenti dati in un array multidimensionale?

Sesso: maschio |
femminile Colore dei capelli: Biondo | Bruna |
Black Colore degli occhi: Blu | Marrone | Verde | Hazel

L'istinto mi sta dicendo che dovrei creare un array così:

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

Per favore, mostra come riempiresti questo array senza un ciclo, e poi con un ciclo. Ogni espansione su concetti e utilizzo è stata apprezzata.

È stato utile?

Soluzione

Non toccherò la tua persona. Attribuisce un esempio perché non credo che un array 2D sia una buona idea, figuriamoci in 3D (personalmente userei un array di strutture).

Tuttavia, le matrici multidimensionali sono molto utili quando si dispone di un qualche tipo di spazio di dati ortogonali (ovvero se si hanno diverse "scelte" che sono indipendenti l'una dall'altra).

Ad esempio, se stai memorizzando i tempi di risposta di 20 persone su 10 test, in cui ogni test viene ripetuto 3 volte e il tutto viene eseguito una volta al mese per 12 mesi, potresti avere un array come questo:

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

Altri suggerimenti

A rischio di sembrare banali, si usano array di tre o più dimensioni quando si hanno tre o più dimensioni di dati. Quindi immagino tu abbia problemi a immaginare tre dimensioni dei dati.

Che ne dici di 3-D Tic Tac Toe ? Qualsiasi rappresentazione discreta di dati tridimensionali rientra in questa categoria.

Per quanto riguarda gli attributi come il colore dei capelli e così via, non userei un array multidimensionale per questo. Usa oggetti con proprietà per questo ed enum (es. Genere come enum) come appropriato. Sarà molto più leggibile di una matrice N-dimensionale.

Direi che nel tuo esempio una matrice multidimensionale non ha senso. Una lezione ha molto più senso nella tua situazione. Qualcosa come un'enumerazione memorizzata come variabile membro sarebbe un modo in cui potresti andare:

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

ecc ...

Per modellare strutture di dati con più dimensioni. Una scacchiera è un buon esempio, 1 dimensione è per il grado, l'altra per il file.

Poiché le categorie di dati nel tuo esempio (genere, colore degli occhi, colore dei capelli) non hanno alcuna relazione con altre categorie, sembra che questo sarebbe meglio rappresentato come 3 matrici diverse, ognuna con 1 dimensione.

Se si desidera eseguire il loop su un array multidimensionale, è sufficiente utilizzare un loop all'interno di un 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
   }
}

Può essere utile pensare a un array come un indirizzo.

123 Main St Springfield MA

Usando questo esempio, il mio primo array sarebbe un array di stati. Ogni stato avrebbe una serie di città, che le città possiedono strade e infine le strade contengono indirizzi individuali.

Con questo array potremmo facilmente creare una mailing list con ogni indirizzo. Basta passare in rassegna ciascun array e si sarebbe in grado di stampare ogni indirizzo o qualunque cosa si debba fare.

Guardando il tuo esempio, non vedo gli array multidimensionali come una buona scelta. A meno che la cosa principale che vuoi fare con le tue matrici sia trovare sottoinsiemi dei tuoi dati, come le persone che sono occhi femminili / biondi / blu. Seguirei il suggerimento di usare una classe. Quando guardi un oggetto persona in un array dovrai conoscere i valori dell'indice che puntano a quella persona per capire quelle caratteristiche.

Un altro esempio che potrebbe essere utile è l'internazionalizzazione dei messaggi in un'applicazione. Gli array possono essere lingua, stato (errore, avviso, informazioni), ID messaggio (stringhe di messaggi di un array).

Per quanto riguarda il riempimento degli array, è possibile utilizzarne solo alcuni per i loop se i dati sono stati ordinati. Altrimenti analizza i tuoi dati di input per identificare gli indici appropriati.

Come hanno scritto gli altri, il tuo esempio non è adatto a un array 3D. Il tuo esempio sembra più appropriato per una struttura di dati 2D. Un indice è rappresentato dalle persone, l'altro indice è la caratteristica: sesso, colore dei capelli, colore degli occhi. Oppure potresti usare qualche altra struttura di dati ...

Un semplice esempio di un array 3D: considerare la memorizzazione di un black & amp; non compresso; film digitale bianco. Ogni fotogramma è un'immagine 2D X vs Y con valori di intensità: immagine (i, j). Ora per avere più fotogrammi per avere un filmato, è possibile memorizzarlo come immagini (i, j, k), dove k cambia nel tempo. Se il film fosse a colori, potresti aggiungere una quarta dimensione per memorizzare tre colori primari: cimages (i, j, q, k), q = 1,2,3 e avere un array 4D.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top