タプル
書ける形(10)
Section titled “書ける形(10)”| 書き方 | 説明 |
|---|---|
(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 | タプルどうしの比較 |
書けない形(2)
Section titled “書けない形(2)”| 書き方 | 説明 | エラー | 理由 | 代わりに |
|---|---|---|---|---|
(long, long) b = a; | タプルどうしを移す | TUKI0099 | 未実装 | 要素を1つずつ移す(変換) |
(int, int)[][] ps = new (int, int)[2][]; | タプルの配列の配列を作る | TUKI0001 | 未実装 | 1 段の配列にするか、要素ごとに別の配列を持つ |
タプルの値は struct と同じく値として運ばれます。ローカル変数・引数・戻り値・フィールド・配列の要素のどこにでも置けます。 |
位置による宣言
Section titled “位置による宣言”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 }}入れ子のタプル
Section titled “入れ子のタプル”using UnityEngine;using Tsukimi;
public class TyTupleNested : TsukimiBehaviour{ void Start() { ((int, int), int) p = ((1, 2), 3); Debug.Log(p.Item2); // => 3 }}戻り値の分解
Section titled “戻り値の分解”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); }}宣言済みの変数への分解代入
Section titled “宣言済みの変数への分解代入”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 }}配列の要素への分解代入
Section titled “配列の要素への分解代入”代入先には配列の要素やフィールドも置けます。添字は 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 }}引数での受け取り
Section titled “引数での受け取り”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; }}フィールドとして保持
Section titled “フィールドとして保持”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 }}タプルどうしの比較
Section titled “タプルどうしの比較”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 }}