D-programming-arrays
Dプログラミング-配列
Dプログラミング言語は、 arrays という名前のデータ構造を提供します。このデータ構造には、同じタイプの要素の固定サイズの順次コレクションが格納されます。 配列は、データのコレクションを格納するために使用されます。 多くの場合、配列を同じ型の変数のコレクションと考える方が便利です。
number0、number1、…、number99などの個々の変数を宣言する代わりに、numbersなどの1つの配列変数を宣言し、numbers [0]、numbers [1]、…、numbers [99]を使用して表現します個々の変数。 配列内の特定の要素は、インデックスによってアクセスされます。
すべての配列は、連続したメモリ位置で構成されています。 最下位アドレスは最初の要素に対応し、最上位アドレスは最後の要素に対応します。
配列の宣言
Dプログラミング言語で配列を宣言するには、プログラマは次のように配列に必要な要素の型と要素の数を指定します-
type arrayName [ arraySize ];
これは、単一次元配列と呼ばれます。 _arraySize_はゼロより大きい整数定数でなければならず、_type_は任意の有効なDプログラミング言語データ型にすることができます。 たとえば、double型の_balance_という10要素の配列を宣言するには、次のステートメントを使用します-
double balance[10];
配列の初期化
Dプログラミング言語の配列要素は、次のように1つずつまたは単一のステートメントを使用して初期化できます。
double balance[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
右側の角括弧[]の間の値の数は、角括弧[]の間の配列に対して宣言する要素の数より大きくすることはできません。 次の例では、配列の単一の要素を割り当てます-
配列のサイズを省略すると、初期化を保持するのに十分な大きさの配列が作成されます。 したがって、あなたが書く場合
double balance[] = [1000.0, 2.0, 3.4, 17.0, 50.0];
次に、前の例で作成したのとまったく同じ配列を作成します。
balance[4] = 50.0;
上記のステートメントは、配列の5番目の要素番号に50.0の値を割り当てます。 すべての配列はベースインデックスとも呼ばれる最初の要素のインデックスとして0を持つため、4番目のインデックスを持つ配列は5番目、つまり最後の要素になります。 次の絵の表現は、上記で説明したのと同じ配列を示しています-
配列要素へのアクセス
配列名にインデックスを付けることにより、要素にアクセスします。 これは、配列の名前の後に角かっこ内に要素のインデックスを配置することによって行われます。 たとえば-
double salary = balance[9];
上記のステートメントは、配列から10 ^ th ^要素を取得し、値を変数_salary_に割り当てます。 次の例では、宣言、割り当て、および配列へのアクセスを実装しています-
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]);
}
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Element Value
0 100
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
静的配列と動的配列
プログラムの作成中に配列の長さが指定されている場合、その配列は静的配列です。 プログラムの実行中に長さが変化する場合、その配列は動的配列です。
長さを省略すると動的配列になるため、動的配列の定義は固定長配列の定義よりも簡単です-
int[] dynamicArray;
配列のプロパティ
ここに配列のプロパティがあります-
Sr.No. | Property & Description |
---|---|
1 |
.init 静的配列は、リテラルの各要素が配列要素型の.initプロパティである配列リテラルを返します。 |
2 |
.sizeof 静的配列は、配列の長さに配列要素ごとのバイト数を掛けた値を返しますが、動的配列は、動的配列参照のサイズを返します。これは、32ビットビルドでは8、64ビットビルドでは16です。 |
3 |
.length 静的配列は配列内の要素の数を返し、動的配列は配列内の要素の数を取得/設定するために使用されます。 長さはsize_t型です。 |
4 |
.ptr 配列の最初の要素へのポインターを返します。 |
5 |
.dup 同じサイズの動的配列を作成し、配列の内容をそこにコピーします。 |
6 |
.idup 同じサイズの動的配列を作成し、配列の内容をそこにコピーします。 コピーは不変として入力されます。 |
7 |
.reverse 配列内の要素の順序を逆にします。 配列を返します。 |
8 |
.sort 配列内の要素の順序を適切にソートします。 配列を返します。 |
例
次の例では、配列のさまざまなプロパティを説明します-
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);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
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]
Dの多次元配列
Dプログラミングでは、多次元配列を使用できます。 多次元配列宣言の一般的な形式は次のとおりです-
type name[size1][size2]...[sizeN];
例
次の宣言は、3次元の5を作成します。 10 . 4整数配列-
int threedim[5][10][4];
Dの2次元配列
多次元配列の最も単純な形式は、2次元配列です。 2次元配列は、本質的には1次元配列のリストです。 サイズ[x、y]の2次元整数配列を宣言するには、次のように構文を書きます-
type arrayName [ x ][ y ];
ここで、 type は有効なDプログラミングデータタイプで、 arrayName は有効なDプログラミング識別子です。
ここで、_type_は任意の有効なDプログラミングデータ型であり、_arrayName_は有効なDプログラミング識別子です。
2次元配列は、x個の行とy個の列を持つテーブルと考えることができます。 3行4列を含む2次元配列 a は以下のように表示することができます-
したがって、配列 a のすべての要素は、 a [i] [j] として要素によって識別されます。ここで、 a は配列の名前であり、 i および j は一意に識別する添え字です。 aの各要素。
2次元配列の初期化
多次元配列は、各行に括弧付きの値を指定することにより初期化できます。 次の配列には3つの行があり、各行には4つの列があります。
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*/
];
目的の行を示すネストされた中括弧はオプションです。 次の初期化は前の例と同等です-
int a[3][4] = [0,1,2,3,4,5,6,7,8,9,10,11];
2次元配列要素へのアクセス
2次元配列の要素には、添え字を使用してアクセスします。これは、配列の行インデックスと列インデックスを意味します。 例えば
int val = a[2][3];
上記のステートメントは、配列の3行目から4番目の要素を取ります。 上記の図で確認できます。
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]);
}
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
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
Dの一般的な配列操作
ここに配列で実行されるさまざまな操作があります-
配列スライス
配列の一部を使用することが多く、配列のスライスは非常に役立ちます。 配列スライスの簡単な例を以下に示します。
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);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
[2, 3.4]
配列コピー
配列のコピーも使用します。 配列コピーの簡単な例を以下に示します。
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);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
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]
配列設定
配列に値を設定する簡単な例を以下に示します。
import std.stdio;
void main () {
//an array with 5 elements.
double a[5];
a[] = 5;
writeln("Array a:",a);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Array a:[5, 5, 5, 5, 5]
配列連結
2つの配列を連結する簡単な例を以下に示します。
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);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Array c: [5, 5, 5, 5, 5, 10, 10, 10, 10, 10]