Programowanie D - tablice
Język programowania D zapewnia strukturę danych o nazwie arrays, który przechowuje sekwencyjną kolekcję elementów tego samego typu o stałym rozmiarze. Tablica służy do przechowywania kolekcji danych. Często bardziej przydatne jest myślenie o tablicy jako o zbiorze zmiennych tego samego typu.
Zamiast deklarować pojedyncze zmienne, takie jak liczba0, liczba1, ... i liczba99, deklarujesz jedną zmienną tablicową, taką jak liczby, i używasz liczb [0], liczb [1] i ..., liczb [99] do reprezentowania indywidualne zmienne. Dostęp do określonego elementu w tablicy uzyskuje się za pomocą indeksu.
Wszystkie tablice składają się z ciągłych lokalizacji pamięci. Najniższy adres odpowiada pierwszemu elementowi, a najwyższy adres ostatniemu elementowi.
Deklarowanie tablic
Aby zadeklarować tablicę w języku programowania D, programista określa typ elementów i liczbę elementów wymaganych przez tablicę w następujący sposób -
type arrayName [ arraySize ];
Nazywa się to tablicą jednowymiarową. ArraySize musi być liczbą całkowitą większą od zera stała i typ może być dowolny poprawny typ danych języka programowania D. Na przykład, aby zadeklarować 10-elementową tablicę o nazwie balance typu double, użyj tej instrukcji -
double balance[10];
Inicjowanie tablic
Elementy tablicy języka programowania D można inicjować pojedynczo lub za pomocą pojedynczej instrukcji w następujący sposób
double balance[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
Liczba wartości w nawiasach kwadratowych [] po prawej stronie nie może być większa niż liczba elementów zadeklarowanych w tablicy w nawiasach kwadratowych []. Poniższy przykład przypisuje pojedynczy element tablicy -
Jeśli pominiesz rozmiar tablicy, zostanie utworzona tablica wystarczająco duża, aby pomieścić inicjalizację. Dlatego jeśli piszesz
double balance[] = [1000.0, 2.0, 3.4, 17.0, 50.0];
następnie utworzysz dokładnie taką samą tablicę, jak w poprzednim przykładzie.
balance[4] = 50.0;
Powyższa instrukcja przypisuje elementowi numerowi 5 w tablicy wartość 50,0. Tablica z czwartym indeksem będzie piątym, czyli ostatnim elementem, ponieważ wszystkie tablice mają 0 jako indeks pierwszego elementu, który jest również nazywany indeksem bazowym. Poniższe przedstawienie graficzne przedstawia tę samą tablicę, którą omówiliśmy powyżej -
Dostęp do elementów tablicy
Dostęp do elementu uzyskuje się poprzez indeksowanie nazwy tablicy. Odbywa się to poprzez umieszczenie indeksu elementu w nawiasach kwadratowych po nazwie tablicy. Na przykład -
double salary = balance[9];
Powyższe stwierdzenie ma 10 th elementu z tablicy i przypisuje się wartość zmiennej wynagrodzenia . Poniższy przykład implementuje deklarację, przypisanie i dostęp do tablic -
import std.stdio;
void main() {
int n[ 10 ]; // n is an array of 10 integers
// initialize elements of array n to 0
for ( int i = 0; i < 10; i++ ) {
n[ i ] = i + 100; // set element at location i to i + 100
}
writeln("Element \t Value");
// output each array element's value
for ( int j = 0; j < 10; j++ ) {
writeln(j," \t ",n[j]);
}
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Element Value
0 100
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
Tablice statyczne a tablice dynamiczne
Jeśli długość tablicy jest określona podczas pisania programu, tablica ta jest tablicą statyczną. Gdy długość może się zmienić podczas wykonywania programu, tablica ta jest tablicą dynamiczną.
Definiowanie tablic dynamicznych jest prostsze niż definiowanie tablic o stałej długości, ponieważ pominięcie długości powoduje utworzenie tablicy dynamicznej -
int[] dynamicArray;
Właściwości tablicy
Oto właściwości tablic -
Sr.No. | Właściwość i opis |
---|---|
1 | .init Tablica statyczna zwraca literał tablicowy, w którym każdy element literału jest właściwością .init typu elementu tablicy. |
2 | .sizeof Tablica statyczna zwraca długość tablicy pomnożoną przez liczbę bajtów na element tablicy, podczas gdy tablice dynamiczne zwracają rozmiar odwołania do tablicy dynamicznej, który wynosi 8 w kompilacjach 32-bitowych i 16 w kompilacjach 64-bitowych. |
3 | .length Tablica statyczna zwraca liczbę elementów w tablicy, podczas gdy tablice dynamiczne są używane do pobierania / ustawiania liczby elementów w tablicy. Długość jest typu size_t. |
4 | .ptr Zwraca wskaźnik do pierwszego elementu tablicy. |
5 | .dup Utwórz tablicę dynamiczną o tym samym rozmiarze i skopiuj do niej zawartość tablicy. |
6 | .idup Utwórz tablicę dynamiczną o tym samym rozmiarze i skopiuj do niej zawartość tablicy. Kopia jest wpisywana jako niezmienna. |
7 | .reverse Odwraca kolejność elementów w tablicy. Zwraca tablicę. |
8 | .sort Sortuje w kolejności elementów w tablicy. Zwraca tablicę. |
Przykład
Poniższy przykład wyjaśnia różne właściwości tablicy -
import std.stdio;
void main() {
int n[ 5 ]; // n is an array of 5 integers
// initialize elements of array n to 0
for ( int i = 0; i < 5; i++ ) {
n[ i ] = i + 100; // set element at location i to i + 100
}
writeln("Initialized value:",n.init);
writeln("Length: ",n.length);
writeln("Size of: ",n.sizeof);
writeln("Pointer:",n.ptr);
writeln("Duplicate Array: ",n.dup);
writeln("iDuplicate Array: ",n.idup);
n = n.reverse.dup;
writeln("Reversed Array: ",n);
writeln("Sorted Array: ",n.sort);
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Initialized value:[0, 0, 0, 0, 0]
Length: 5
Size of: 20
Pointer:7FFF5A373920
Duplicate Array: [100, 101, 102, 103, 104]
iDuplicate Array: [100, 101, 102, 103, 104]
Reversed Array: [104, 103, 102, 101, 100]
Sorted Array: [100, 101, 102, 103, 104]
Tablice wielowymiarowe w D
Programowanie D umożliwia tworzenie tablic wielowymiarowych. Oto ogólna forma wielowymiarowej deklaracji tablicy -
type name[size1][size2]...[sizeN];
Przykład
Poniższa deklaracja tworzy trójwymiarową 5. 10. 4 tablica liczb całkowitych -
int threedim[5][10][4];
Tablice dwuwymiarowe w D
Najprostszą formą tablicy wielowymiarowej jest tablica dwuwymiarowa. Dwuwymiarowa tablica to w istocie lista tablic jednowymiarowych. Aby zadeklarować dwuwymiarową tablicę liczb całkowitych o rozmiarze [x, y], należy napisać składnię w następujący sposób -
type arrayName [ x ][ y ];
Gdzie type może być dowolnym poprawnym typem danych programowania D i arrayName będzie prawidłowym identyfikatorem programowania D.
Gdzie typ może być dowolnym prawidłowym typem danych programowania D, a arrayName jest prawidłowym identyfikatorem programowania D.
Dwuwymiarową tablicę można traktować jako tabelę, która ma x liczbę wierszy i y liczbę kolumn. Dwuwymiarowa tablicaa zawierający trzy wiersze i cztery kolumny można wyświetlić jak poniżej -
Zatem każdy element w tablicy a jest identyfikowany przez element jako a[ i ][ j ], gdzie a to nazwa tablicy, a i i j to indeksy, które jednoznacznie identyfikują każdy element w.
Inicjowanie tablic dwuwymiarowych
Tablice wielowymiarowe można zainicjować, określając wartości w nawiasach kwadratowych dla każdego wiersza. Poniższa tablica ma 3 wiersze, a każdy wiersz ma 4 kolumny.
int a[3][4] = [
[0, 1, 2, 3] , /* initializers for row indexed by 0 */
[4, 5, 6, 7] , /* initializers for row indexed by 1 */
[8, 9, 10, 11] /* initializers for row indexed by 2 */
];
Zagnieżdżone nawiasy klamrowe, które wskazują zamierzony wiersz, są opcjonalne. Następująca inicjalizacja jest równoważna z poprzednim przykładem -
int a[3][4] = [0,1,2,3,4,5,6,7,8,9,10,11];
Dostęp do dwuwymiarowych elementów tablicy
Dostęp do elementu w dwuwymiarowej tablicy uzyskujemy za pomocą indeksów, czyli indeksu wiersza i kolumny tablicy. Na przykład
int val = a[2][3];
Powyższa instrukcja przyjmuje czwarty element z trzeciego wiersza tablicy. Możesz to zweryfikować w powyższym digramie.
import std.stdio;
void main () {
// an array with 5 rows and 2 columns.
int a[5][2] = [ [0,0], [1,2], [2,4], [3,6],[4,8]];
// output each array element's value
for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 2; j++ ) {
writeln( "a[" , i , "][" , j , "]: ",a[i][j]);
}
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8
Typowe operacje na tablicach w D
Oto różne operacje wykonywane na tablicach -
Wycinanie szyku
Często używamy części tablicy, a dzielenie tablicy jest często bardzo pomocne. Poniżej przedstawiono prosty przykład podziału na tablice.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
double[] b;
b = a[1..3];
writeln(b);
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
[2, 3.4]
Kopiowanie w tablicy
Używamy również kopiowania tablicy. Poniżej przedstawiono prosty przykład kopiowania macierzy.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
double b[5];
writeln("Array a:",a);
writeln("Array b:",b);
b[] = a; // the 5 elements of a[5] are copied into b[5]
writeln("Array b:",b);
b[] = a[]; // the 5 elements of a[3] are copied into b[5]
writeln("Array b:",b);
b[1..2] = a[0..1]; // same as b[1] = a[0]
writeln("Array b:",b);
b[0..2] = a[1..3]; // same as b[0] = a[1], b[1] = a[2]
writeln("Array b:",b);
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Array a:[1000, 2, 3.4, 17, 50]
Array b:[nan, nan, nan, nan, nan]
Array b:[1000, 2, 3.4, 17, 50]
Array b:[1000, 2, 3.4, 17, 50]
Array b:[1000, 1000, 3.4, 17, 50]
Array b:[2, 3.4, 3.4, 17, 50]
Ustawienie tablicy
Poniżej przedstawiono prosty przykład ustawiania wartości w tablicy.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5];
a[] = 5;
writeln("Array a:",a);
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Array a:[5, 5, 5, 5, 5]
Konkatenacja tablic
Poniżej przedstawiono prosty przykład konkatenacji dwóch tablic.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = 5;
double b[5] = 10;
double [] c;
c = a~b;
writeln("Array c: ",c);
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Array c: [5, 5, 5, 5, 5, 10, 10, 10, 10, 10]