D Programmierung - Tupel

Tupel werden zum Kombinieren mehrerer Werte als ein einziges Objekt verwendet. Tupel enthalten eine Folge von Elementen. Die Elemente können Typen, Ausdrücke oder Aliase sein. Die Anzahl und die Elemente eines Tupels sind zur Kompilierungszeit festgelegt und können zur Laufzeit nicht geändert werden.

Tupel haben Eigenschaften sowohl von Strukturen als auch von Arrays. Die Tupelelemente können von verschiedenen Typen sein, wie z. B. Strukturen. Auf die Elemente kann wie bei Arrays indiziert werden. Sie werden von der Tupel-Vorlage aus dem Modul std.typecons als Bibliotheksfunktion implementiert. Tuple verwendet für einige seiner Operationen TypeTuple aus dem Modul std.typetuple.

Tupel Verwenden von Tupel ()

Tupel können mit der Funktion tuple () erstellt werden. Auf die Mitglieder eines Tupels wird über Indexwerte zugegriffen. Ein Beispiel ist unten gezeigt.

Beispiel

import std.stdio; 
import std.typecons; 
 
void main() { 
   auto myTuple = tuple(1, "Tuts"); 
   writeln(myTuple); 
   writeln(myTuple[0]); 
   writeln(myTuple[1]); 
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

Tuple!(int, string)(1, "Tuts") 
1 
Tuts

Tupel mit Tupelvorlage

Tupel kann anstelle der Funktion tuple () auch direkt von der Tupelvorlage erstellt werden. Der Typ und der Name jedes Mitglieds werden als zwei aufeinanderfolgende Vorlagenparameter angegeben. Es ist möglich, über Eigenschaften auf die Mitglieder zuzugreifen, wenn diese mithilfe von Vorlagen erstellt werden.

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); 
}

Wenn der obige Code kompiliert und ausgeführt wird, wird das folgende Ergebnis erzeugt

Tuple!(int, "id", string, "value")(1, "Tuts") 
by index 0 : 1 
by .id : 1 
by index 1 : Tuts 
by .value Tuts

Erweitern von Eigenschafts- und Funktionsparametern

Die Mitglieder von Tuple können entweder durch die .expand-Eigenschaft oder durch Slicing erweitert werden. Dieser erweiterte / geschnittene Wert kann als Funktionsargumentliste übergeben werden. Ein Beispiel ist unten gezeigt.

Beispiel

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..$]); 
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

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

TypeTuple

TypeTuple wird im Modul std.typetuple definiert. Eine durch Kommas getrennte Liste von Werten und Typen. Ein einfaches Beispiel mit TypeTuple finden Sie unten. TypeTuple wird zum Erstellen von Argumentlisten, Vorlagenlisten und Array-Literallisten verwendet.

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);  
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

method 1 5 my string 3.3 r 
5     6