コンテンツにスキップ

タプル

書き方説明
(int, int) p = (1, 2);位置による宣言
(int x, int y) p = (1, 2);要素の名前
((int, int), int) p = ((1, 2), 3);入れ子のタプル
(int a, int b) = Pair();戻り値の分解
(a, b) = (b, a);宣言済みの変数への分解代入
(xs[i], xs[j]) = (xs[j], xs[i]);配列の要素への分解代入
int Take((int, int) p)引数での受け取り
public (int, int) P;フィールドとして保持
(int, int)[] ps = new (int, int)[1];配列の要素
a == bタプルどうしの比較
書き方説明エラー理由代わりに
(long, long) b = a;タプルどうしを移すTUKI0099未実装要素を1つずつ移す(変換
(int, int)[][] ps = new (int, int)[2][];タプルの配列の配列を作るTUKI0001未実装1 段の配列にするか、要素ごとに別の配列を持つ
タプルの値は struct と同じく値として運ばれます。ローカル変数・引数・戻り値・フィールド・配列の要素のどこにでも置けます。
using UnityEngine;
using Tsukimi;
public class TyTupleDecl : TsukimiBehaviour
{
void Start()
{
(int, int) p = (1, 2);
Debug.Log(p.Item1); // => 1
}
}
using UnityEngine;
using Tsukimi;
public class TyTupleNamed : TsukimiBehaviour
{
void Start()
{
(int x, int y) p = (1, 2);
Debug.Log(p.x); // => 1
}
}
using UnityEngine;
using Tsukimi;
public class TyTupleNested : TsukimiBehaviour
{
void Start()
{
((int, int), int) p = ((1, 2), 3);
Debug.Log(p.Item2); // => 3
}
}
using UnityEngine;
using Tsukimi;
public class TyTupleReturn : TsukimiBehaviour
{
void Start()
{
(int a, int b) = Pair();
Debug.Log(a + b); // => 3
}
private (int, int) Pair() { return (1, 2); }
}
using UnityEngine;
using Tsukimi;
public class TupleAssignExisting : TsukimiBehaviour
{
void Start()
{
int a = 1;
int b = 2;
(a, b) = (b, a);
Debug.Log(a * 10 + b); // => 21
}
}

代入先には配列の要素やフィールドも置けます。添字は 1 度だけ評価されます。

using UnityEngine;
using Tsukimi;
public class TupleAssignArrayElements : TsukimiBehaviour
{
void Start()
{
int[] xs = new int[2];
xs[0] = 1;
xs[1] = 2;
int i = 0;
int j = 1;
(xs[i], xs[j]) = (xs[j], xs[i]);
Debug.Log(xs[0] * 10 + xs[1]); // => 21
}
}
using UnityEngine;
using Tsukimi;
public class TyTupleParam : TsukimiBehaviour
{
void Start()
{
Debug.Log(Take((1, 2))); // => 1
}
private int Take((int, int) p) { return p.Item1; }
}
using UnityEngine;
using Tsukimi;
public class TyTupleField : TsukimiBehaviour
{
void Start()
{
P = (1, 2);
Debug.Log(P.Item1); // => 1
}
public (int, int) P;
}

配列の要素にできます。要素の読み書きは ps[0].Item1 の形で書けます。

using UnityEngine;
using Tsukimi;
public class TyTupleArray : TsukimiBehaviour
{
void Start()
{
(int, int)[] ps = new (int, int)[1];
ps[0] = (1, 2);
Debug.Log(ps[0].Item1); // => 1
}
}
using UnityEngine;
using Tsukimi;
public class ExpressionsTupleEquality : TsukimiBehaviour
{
void Start()
{
(int, int) a = (1, 2);
(int, int) b = (1, 2);
Debug.Log(a == b); // => true
}
}