8

So come simulare un array 2d in un array lineare utilizzando [x + y * width] come indice lineare.simulazione lineare dell'array multidimensionale

Posso estendere questo a matrici 3d: [x + y * width + z * width * height].

Esiste una formula generale per l'array N-dimensionale?

Sto cercando una risposta agonistica della lingua.

risposta

7

Sicuro. Basta estendere il vostro esempio dà x + y*width + z*width*height + w*width*height*depth + ...

In altre parole, dim1 + dim2*size1 + dim3*size1*size2 + dim4*size1*size2*size3 + ...

1

Eh, se volete un po 'di codice ... :-) C è indipendente dal linguaggio abbastanza, vero?

assumere ingresso: posizione [dimensioni]

assumere esiste una tabella maxBound [dimensioni] che contiene i confini massime di ogni dimensione della tabella.

int index = 0; 
int multiplier = 1; 
for (int i = 0;i < dimensions;i++) 
{ 
    index += location[i] * multiplier; 
    multiplier *= maxBound[i]; 
} 

L'indice si troverà nel campo dell'indice.

Test: 
location = [3,4,5] 
maxBound = [10,20,30] 
loop initial: index = 0, multiplier = 1. 
loop i=0: index = 3, multiplier = 10. 
loop i=1: index = 43, multiplier = 200. 
loop i=2: index = 1043, multipler = 6000. 

Penso che questo abbia senso, ma questo mi sta venendo fuori di testa.