D-programming-tuples

提供:Dev Guides
移動先:案内検索

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()関数の代わりにTupleテンプレートによって直接構築することもできます。 各メンバーのタイプと名前は、2つの連続したテンプレートパラメーターとして指定されます。 テンプレートを使用して作成すると、プロパティによってメンバーにアクセスできます。

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

タイプタプル

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