D 프로그래밍-배열
D 프로그래밍 언어는 다음과 같은 데이터 구조를 제공합니다. arrays, 동일한 유형의 요소의 고정 크기 순차 컬렉션을 저장합니다. 배열은 데이터 모음을 저장하는 데 사용됩니다. 배열을 동일한 유형의 변수 모음으로 생각하는 것이 종종 더 유용합니다.
number0, number1, ..., number99와 같은 개별 변수를 선언하는 대신 숫자와 같은 하나의 배열 변수를 선언하고 numbers [0], numbers [1] 및 ..., numbers [99]를 사용하여 개별 변수. 배열의 특정 요소는 인덱스로 액세스됩니다.
모든 어레이는 연속적인 메모리 위치로 구성됩니다. 가장 낮은 주소는 첫 번째 요소에 해당하고 가장 높은 주소는 마지막 요소에 해당합니다.
배열 선언
D 프로그래밍 언어로 배열을 선언하기 위해 프로그래머는 다음과 같이 배열에 필요한 요소의 유형과 요소의 수를 지정합니다.
type arrayName [ arraySize ];
이를 1 차원 배열이라고합니다. arraySize는 0보다 정수 상수에 커야하고 형식은 유효한 D 프로그래밍 언어 데이터 타입 일 수있다. 예를 들어, double 유형의 balance 라는 10 개 요소 배열을 선언 하려면 다음 문을 사용하십시오.
double balance[10];
배열 초기화
D 프로그래밍 언어 배열 요소를 하나씩 초기화하거나 다음과 같이 단일 문을 사용하여 초기화 할 수 있습니다.
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 번째 요소를 가져와 변수 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. 아니. | 속성 및 설명 |
---|---|
1 | .init 정적 배열은 리터럴의 각 요소가 배열 요소 유형의 .init 속성 인 배열 리터럴을 반환합니다. |
2 | .sizeof 정적 배열은 배열 길이에 배열 요소 당 바이트 수를 곱한 값을 반환하는 반면 동적 배열은 동적 배열 참조의 크기 (32 비트 빌드에서는 8 개, 64 비트 빌드에서는 16 개)를 반환합니다. |
삼 | .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 개의 열이있는 테이블로 생각할 수 있습니다. 2 차원 배열a 3 개의 행과 4 개의 열을 포함하는 것은 아래와 같이 표시 될 수 있습니다
따라서 배열의 모든 요소 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]
어레이 복사
또한 copying array를 사용합니다. 배열 복사에 대한 간단한 예가 아래에 나와 있습니다.
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]
배열 연결
두 배열의 연결에 대한 간단한 예가 아래에 나와 있습니다.
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]