[Generale] Re: [Tecnica] Perl e strutture dati multidimensionali

Szymon Stefanek pragma a siena.linux.it
Gio 23 Nov 2006 00:53:04 GMT


On Thursday 23 November 2006 01:18, Alex M4DC4T wrote:
> "Quindi l'array esterno è un array di references e l'array interno è
> "puntato" dagli elementi di quello interno."
> forse doveva essere
> "Quindi l'array esterno è un array di references e l'array interno è
> "puntato" dagli elementi di quello ESTERNO.


Si, hai ragione: devo forzarmi a rileggere due volte le mail prima di 
inviarle.

Cmq se mi hai corretto vuol dire che ti torna :)

> Ma praticamente il fatto che non si possano in perl fare array multi
> dimensionali (oltre i due dimensionali, tramite "trucco" dei references,
> che poi non mi sembrano ugualmente bidimensionali, ma solo con una
> reference....) significa che difficilmente si possono fare matrici
> multidimensionali?

Un array a più di una dimensione è sostanzialmente assimilabile ad una 
matrice. Anzi, per generalizzare, diciamo che è solo una questione di "nomi"
ma in realtà parliamo delle stesse cose.

Array multidimensionale è una collezione di elementi ordinati
ed indicizzabile tramite N indici.

Il nome comune "array" (senza specificare le dimensioni) viene solitamente 
associato ad una collezione indicizzabile tramite un singolo indice ovvero un 
vettore (ovvero una matrice di dimensione 1). Il nome comune "matrice" si 
associa facilmente alla collezione indicizzabile da due indici e 
rappresentabile mediante una griglia rettangolare di oggetti ovvero un array 
bidimensionale. In tre dimensioni non vi è un nome canonico e dobbiamo 
dire "array a tre dimensioni" oppure "matrice a tre dimensioni"...
Nsomma, son la stessa cosa, via. Il nome scelto dipende solo dal contesto
di partenza...  

Inoltre si possono simulare array a dimensione maggiore di 2 (o matrici, se 
preferisci) sempre con lo stesso trucco.

	$interno_interno[10] = 1;
	$interno[4] = \@interno_interno;
	$esterno[2] = \@interno;

	print  $esterno[2]->[4]->[10];

> E comunque anche nell'ultimo aggiornamento del programma rimangono le cose
> in questo modo?

Le vecchie versioni del perl erano messe peggio di così.
Nelle ultime versioni, invece, son stati aggiunti i references
e i vari trucchi sintattici che ti permettono appunto
di scrivere

	$esterno[2][4][10] = 1;
	
Nota che così sembra proprio una matrice di dimensione 3...
...in realtà internamente è un "array di reference ad array di
reference ad array di scalari".


-- 

Szymon Stefanek

------------------------------------------------------------------------------
-
- Black holes were created when God divided by 0
-
------------------------------------------------------------------------------
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        non disponibile
Tipo:        application/pgp-signature
Dimensione:  189 bytes
Descrizione: non disponibile
Url:         http://liste.siena.linux.it/pipermail/generale/attachments/20061123/23c342f5/attachment-0001.pgp


Maggiori informazioni sulla lista Generale