D 프로그래밍-튜플
튜플은 여러 값을 단일 객체로 결합하는 데 사용됩니다. 튜플에는 일련의 요소가 포함됩니다. 요소는 유형, 표현식 또는 별칭 일 수 있습니다. 튜플의 수와 요소는 컴파일 타임에 고정되며 런타임에 변경할 수 없습니다.
튜플에는 구조체와 배열의 특성이 있습니다. 튜플 요소는 구조체와 같은 다른 유형일 수 있습니다. 요소는 배열과 같은 인덱싱을 통해 액세스 할 수 있습니다. std.typecons 모듈의 Tuple 템플릿에 의해 라이브러리 기능으로 구현됩니다. Tuple은 일부 작업을 위해 std.typetuple 모듈의 TypeTuple을 사용합니다.
tuple ()을 사용한 튜플
tuple () 함수로 튜플을 생성 할 수 있습니다. 튜플의 멤버는 인덱스 값으로 액세스됩니다. 아래에 예가 나와 있습니다.
예
import std.stdio;
import std.typecons;
void main() {
auto myTuple = tuple(1, "Tuts");
writeln(myTuple);
writeln(myTuple[0]);
writeln(myTuple[1]);
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
Tuple!(int, string)(1, "Tuts")
1
Tuts
튜플 템플릿을 사용하는 튜플
tuple () 함수 대신 Tuple 템플릿을 사용하여 튜플을 직접 구성 할 수도 있습니다. 각 멤버의 유형과 이름은 두 개의 연속 템플릿 매개 변수로 지정됩니다. 템플릿을 사용하여 생성 할 때 속성별로 멤버에 액세스 할 수 있습니다.
import std.stdio;
import std.typecons;
void main() {
auto myTuple = Tuple!(int, "id",string, "value")(1, "Tuts");
writeln(myTuple);
writeln("by index 0 : ", myTuple[0]);
writeln("by .id : ", myTuple.id);
writeln("by index 1 : ", myTuple[1]);
writeln("by .value ", myTuple.value);
}
위의 코드를 컴파일하여 실행하면 다음과 같은 결과가 나옵니다.
Tuple!(int, "id", string, "value")(1, "Tuts")
by index 0 : 1
by .id : 1
by index 1 : Tuts
by .value Tuts
속성 및 함수 매개 변수 확장
Tuple의 멤버는 .expand 속성 또는 슬라이스로 확장 할 수 있습니다. 이 확장 / 슬라이스 값은 함수 인수 목록으로 전달할 수 있습니다. 아래에 예가 나와 있습니다.
예
import std.stdio;
import std.typecons;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(int a, float b, char c) {
writeln("method 2 ",a,"\t",b,"\t",c);
}
void main() {
auto myTuple = tuple(5, "my string", 3.3, 'r');
writeln("method1 call 1");
method1(myTuple[]);
writeln("method1 call 2");
method1(myTuple.expand);
writeln("method2 call 1");
method2(myTuple[0], myTuple[$-2..$]);
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
method1 call 1
method 1 5 my string 3.3 r
method1 call 2
method 1 5 my string 3.3 r
method2 call 1
method 2 5 3.3 r
유형 Tuple
TypeTuple은 std.typetuple 모듈에 정의되어 있습니다. 쉼표로 구분 된 값 및 유형 목록입니다. TypeTuple을 사용한 간단한 예가 아래에 나와 있습니다. TypeTuple은 인수 목록, 템플릿 목록 및 배열 리터럴 목록을 만드는 데 사용됩니다.
import std.stdio;
import std.typecons;
import std.typetuple;
alias TypeTuple!(int, long) TL;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(TL tl) {
writeln(tl[0],"\t", tl[1] );
}
void main() {
auto arguments = TypeTuple!(5, "my string", 3.3,'r');
method1(arguments);
method2(5, 6L);
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
method 1 5 my string 3.3 r
5 6