- 0 Discussione
-
Gli Array
Indice |
Introduzione
Modifica
Cos'è un array??
Modifica
Gli array (o vettori) sono delle strutture dati che contengono una serie di elementi dello stesso tipo, ogni elemento dell'array (accessibile perchè ha un indice che inizia da 0) può essere visto come una variabile classica.
Gli Array del D
Modifica
Gli array del D sono leggermente più avanzati di quelli del C/C++, possiedono delle proprietà native e costrutti particolari per rendere la loro manipolazione molto semplice, performante e chiara.
Utilizzare gli array
Modifica
Dichiarazione
Modifica
La dichiarazione di un array è analoga a quella delle variabili, l'unica cosa da ricordare quando abbiamo intenzione di usare un array è che dobbiamo far seguire al nome del tipo le parentesì quadre seguite una dopo l'altra: []
int[] mioArray;
Inizializzazione
Modifica
Dopo aver dichiarato un array è possibile inizializzarlo, l'inizializzazione si fa nel segente modo:
int[] mioArray = [1, 2, 3, 4, 5];
Array con dimensione pre-fissata
Modifica
Un array può anche avere una dimensione stabilita dall'utente:
int[3] mioArray;
Questo array è di 3 elementi (di index 0, 1, 2)
Proprietà native degli array
Modifica
Queste "funzioni" che seguono sono native del linguaggio, le possiede ogni array che viene dichiarato sia che esso sia dinamico o statico:
- .sizeof: Restituisce la dimensione dell'array (DimensioneTipo * N° Elementi)
- .length: Restituisce la lunghezza dell'array
- .ptr: Restituisce un puntatore all'inizio dell'array
- .reverse: Restituisce una copia dell'array con gli elementi rovesciati
- .sort: Restituisce un array con gli elementi riordinati
- .dup: Restituisce un array dinamico della stessa dimensione e contenuto
int[] dynArray = new int[10]; //Cambio il valore degli elementi dell'array da 0 a 5 col valore 45 dynArray[0..5] = 45; //Faccio puntare un puntatore all'inizio dell'array int* pInt = dynArray.ptr; //Ricavo la lunghezza dell'array int length = dynArray.length; //Ricavo la dimensione dell'array int size = dynarray.sizeof;
Tipi di array
Modifica
Array Statici
Modifica
Gli array statici si possono dichiarare in due modi, o con lo stile del C++ con le [] nel nome oppure in stile Java con le [] nel tipo:
//Stile C++ int intArray1[5];
//Stile Java o C# int[5] intArray2;
Array Dinamici
Modifica
Per gli array dinamici, la sintassi è simile a quella degli array statici, non si deve utilizzare un puntatore per costruire array dinamici, ma si fanno nello stesso modo del Java o del C#:
//Stile C++ int intArray1[] = new int[5]; //Stile Java o C# int[] intArray2 = new int[5];
Array Associativi
Modifica
E' un particolare tipo di array che assume la forma key|value. Supporta delle proprietà aggiuntive:
- .keys: Restituisce un array dinamico di tutte le key/i> dell'array associativo
- .values: Restituisce un array dinamico di tutti i <i>value dell'array associativo
- .rehash: Riorgnanizza l'array per renderlo più efficiente nella lettura, (restituisce un reference all'array riorganizzato)
int[char[]] b; //Array associativo b["Ciao"] = 3; //Assegno 3 alla posizione dell'array dove 'key' vale "Ciao" foo(b["Ciao"]); //Passo il valore 3 alla funzione.
Operazioni con gli array
Modifica
Concatenare due o più array
Modifica
Il D può concatenare due o più array, restituendone un'altro con la lunghezza uguale alla somma della lunghezza degli array e i valori messi in sequenza, degli array concatenati:
int[] a; int[] b; int[] c;
//In D la tilde (~) è l'operatore di concatenamento e (+) è l'operatore di somma. c = a ~ b;
Sottoinsiemi di array (slicing)
Modifica
Si possono creare anche sottoinsiemi di array più grandi:
int[10] a; int[] b;
//Creo un array uguale al sottoinsieme dell'array a, prendendo gli elementi //dall'indice 0 all'indice 3. b = a[0..3];