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