2008-11-04 3 views
5

Come hai spiegato gli array annidati a un programmatore. Sto pensando a qualcuno che ha una conoscenza di base della programmazione, ma sta cercando di fare una codifica più complicata.Spiegazione di matrici annidate a un programmatore

L'array con array funziona, ma non riescono a capirne l'idea.

Edit: esempio di un array nidificato:

array(
    'array1' => array(
     'key1' => 'val1', 
     'key2' => 'val2', 
    ), 
    'array2' => array(
     'key1' => 'val1', 
     'key2' => 'val2', 
    ), 
); 

Naturalmente, essi sono di solito più complicato di questo e forse questo è il problema.

+0

Spiegare (per noi, prima :) cosa intendi con "matrici annidate"! Fai un esempio in C o in un'altra lingua ... –

+1

Questa domanda sembra essere fuori tema perché non rientra nei limiti della discussione come descritto nel Centro assistenza. – Will

risposta

10

Dite loro di pensare a un array come elenco: aiuta a dare loro qualcosa di meno astratto, come una lista della spesa. Quindi, un array annidato è semplicemente un elenco di liste.

Forse ho una lista di cose da fare, una lista della spesa e una lista dei desideri su amazon.com. Ora ho una lista di tutte le mie liste, e posso esaminare tutti quegli elementi in ciascuna lista passandoci sopra.

2

Come hai spiegato? Non sembra un grande salto per qualcuno che capisce gli array monodimensionali per poter cogliere il concetto che invece di un int o di una stringa che ogni elemento dell'array contiene invece un altro array.

Forse un'analogia che confronta le directory aiuterà, una matrice monodimensionale sarebbe analoga a una directory che contiene un mucchio di file, una matrice bidimensionale a una directory che contiene diverse altre directory, ognuna contenente un mucchio di file, ecc.

0

Se si sta guardando il tipo C, gli array non irregolari, confrontandolo con i numeri, la parte 10 di base e le cifre potrebbero essere utili. Un'altra buona fonte per questo stesso effetto sarebbe tempo dato che ha una base non uniforme 60s = 1m, 60m = 1h, 24h = 1giorno, 7giorno = 1 settimana

1

Utilizzare un bitmap come esempio. In C, è possibile effettuare una bitmap di un X come questo:

int x[5][5] = { 
    { 1,0,0,0,1 }, 
    { 0,1,0,1,0 }, 
    { 0,0,1,0,0 }, 
    { 0,1,0,1,0 }, 
    { 1,0,0,0,1 } 
}; 

Poi mostrare loro come utilizzare annidati for loop per visualizzare l'immagine bitmap.

Gli esempi aiutano sempre, e questo fa pensare anche agli array annidati come array multidimensionali. In realtà è probabilmente meglio comprendere array multidimensionali in un linguaggio come C prima di apprendere gli array "annidati" in linguaggi come Python in cui è possibile avere diversi livelli di nidificazione nello stesso array.

+0

tu * puoi * farlo in C, il tuo compilatore sottolineerà che forse il tuo int in un int * in quella sezione di codice non è la migliore idea che tu abbia mai trovato;) – tloach

+0

Cosa intendi? Questo è il modo corretto di inizializzare un array multidimensionale, lo uso sempre e il mio compilatore non dice nulla al riguardo. –

+0

Ho appena controllato e posso confermare che il mio codice è completamente OK. Posso capire perché potresti pensare che "{1,0,0,0,1}" valuti un puntatore a un int, ma in realtà le parentesi interne nell'inizializzazione sono lì solo per la leggibilità. Scriverlo senza le parentesi avrebbe lo stesso identico effetto. –

1

Gli sport possono fornire analogie appropriate per descrivere l'applicazione di array annidati. Una squadra è una schiera di persone, una competizione è una schiera di squadre che giocano l'una contro l'altra.

Tuttavia è un caso di trovare l'analogia che fa clic con lo studente. Trova l'analogia giusta e riuscirai a capire anche il più lento degli studenti. Assicurati solo che le analogie siano a tenuta stagna. Come le astrazioni, stanno perdendo.

5

Un array nidificato è un set all'interno di un set. Quindi, una biblioteca ha una serie di libri, un libro ha una serie di capitoli. Un capitolo ha una serie di paragrafi, un paragrafo ha una serie di frasi. Una frase ha una serie di parole.

For each book in library 

    For each chapter in book 

     For each paragraph in chapter 

ecc ...

1

Un esempio concreto è l'indice sul retro di un libro. Un elenco di parole, ogni parola associata a un elenco di numeri di pagina.

mele - 1, 2, 3-4
orsi - 32-35, 79, 83
gatti - 14, 15

0

Quello che mi ricordo il mio maestro a fare per spiegare gli array multidimensionali era quello di portare a un piccolo file di schedario portatile (non diversamente dai vecchi cabinet del sistema decimale Dewey che si potevano trovare nelle biblioteche qualche tempo fa).

Ogni slot era un array bidimensionale (vale a dire che ciascun indice conteneva una serie di carte note). Ma il contenitore stesso era un indice di un array tridimensionale (vale a dire che ogni indice conteneva un array che conteneva un array di note). Quindi da lì la teoria è stata facile.

Gli esempi concreti sono molto utili.

0

2 dimensioni è facile da spiegare. Pensa a un tavolo. 3 dimensioni basti pensare a un cubo o altra immagine 3d. Le 4 dimensioni pensano a una serie di immagini come un film con la quarta dimensione che è il tempo.

4+ dimensioni è difficile da visualizzare utilizzando tale modello. Ma pensalo come uno schedario con un altro schedario dentro aiuta. Apri il cassetto e fuori si apre uno schedario. Trovi il cassetto che vuoi e apri quel cassetto e ne apri un altro schedario .... ancora e ancora fino a quando non ottieni il tuo giornale.

2

Disegnalo.

Una variabile è una casella
1 array dimensionale è una riga di caselle.
L'array bidimensionale è una griglia di riquadri.
L'array 3 dimensionale è un cubo di scatole.

Se hanno problemi con il concetto generale, non tentare di spiegare visivamente 4 dimensioni.

0

Forse lo stai spiegando dal contesto di qualcuno che comprende una serie di array. Proverò a ingannarli facendoli capire che li capiscono già iniziando dal più piccolo (leggi l'array interiore) ... e lentamente espandendosi, dando loro un sacco di tempo per porre domande fino a quando non sono terminati.

Disegno aiuta, ma è necessario dare allo studente, in questo caso alcune informazioni e andare lentamente, la maggior parte dei programmatori che conosco tendono ad andare a digiunare e, come per spiegare le cose, anche quando l'ascoltatore non sta monitorando ciò che viene detto .

Sono un metafora, quindi probabilmente cucinerò qualcosa su una serie di scatole con ciascuna numerata, ciascuna delle quali contiene una serie similare (ma molto più piccola) anch'essa numerata. Prenderò questo a solo due livelli per capire e poi forse parlare di 3 dimensioni per conferma. Ma eviterei le 4 dimensioni sulla base del fatto che potrebbero rimanere impiccati nell'idea che non esistono 4 dimensioni, o che non puoi misurare il tempo, o altre simili mine terrestri/distrazioni ... perché questo è l'altro problema i programmatori tendono ad essere ADD e godono di ottenere tracciati laterali.

Anche perché non si sta usando un hash di hash, molto più facile da fare riferimento. :)

Bottom line, piccoli passi.

0

un array è solo un oggetto - una cosa.tutto dovrebbe essere semplice da capire una volta che ottengono quello