【Swift】タプル

タプルとは複数の値を並べて順序をつけたもので、複数の値を 1 つのデータとして扱う事ができるものです。
構造体や class を作るほどではない時や、簡単に型が違う値を扱いたい時などに使います。
アクセスする時は配列同様インデックス番号を使うか、要素にラベルを付けることでラベルでアクセスすることもできます。

前回は 三項演算子 について書きました。

今回は タプル について書いていこうと思います。

タプルとは

タプルとは複数の値を並べて順序をつけたもので、複数の値を 1 つのデータとして扱う事ができるものです。
構造体 や class を作るほどではない時や、簡単に型が違う値を扱いたい時などに使います。
アクセスする時は 配列 同様インデックス番号を使うか、要素にラベルを付けることでラベルでアクセスすることもできます。

配列と違う点

タプル は 配列型 と似ていますが違いとして、配列は例外を除き代入する全ての要素は同じ型でなければならないのに対し、タプルはそれぞれ違う型の要素を複数入れておく事ができます。
タプルは要素を変更することはできますが、要素の追加削除はできません。

配列型 についてはこちらの記事で紹介しています。

タプルの書式

( ) の中に要素をカンマ , で区切って並べます。

(要素, 要素, 要素, ...)

初期値が決まってない場合(後で入れたい場合)は型名のみ宣言する

(型名, 型名, 型名, ...)

タプルの書き方

初期値が決まっている場合の例

//初期値が決まっている場合
var a = (1, 2, 3)

print(a) //(1, 2, 3)
print(type(of: a)) //(Int, Int, Int)

変数 a に タプルで Int型 の要素を 3 つ代入しています。

型名だけ宣言する場合の例

//型名だけ宣言
var b: (Int, String, Double)

変数 b にタプルで型名だけ 3 種類の要素を宣言しています。
この要素に値を入れていきます。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

これでタプルの特徴である、型が違う要素を複数代入することが出来ました。

※ 後から要素を代入するときは、宣言した時の型名の順番と同じ順番の型で要素を入れないとエラーになります。

次は要素の変更をしてみます。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

//bの要素を変更してみる
b = (2, "hoge", 4.56)

print(b) //(2, "hoge", 4.56)

これでタプルの要素が変更されました。

※ 要素の変更は可能ですが要素の追加削除はできません。

アクセス

インデックス番号でアクセスする

アクセス方法は 、
変数、定数名 . インデックス番号
でアクセスします。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

//bの要素を変更してみる
b = (2, "hoge", 4.56)

print(b) //(2, "hoge", 4.56)

//インデックス番号でアクセスする
print(b.0) //2
print(b.1) //hoge
print(b.2) //4.56

インデックス番号 についてはこちらの記事で紹介しています。

tupleコードimg

タプルの要素にラベルを付ける

ラベルを付けるときの書式

(ラベル名: 要素, ラベル名: 要素, ラベル名: 要素, ...)

( ) の中に、ラベル名を書いた後コロン : を書いて要素を代入します。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

ラベルでアクセスする

ラベルでアクセスする時は、
変数・定数名 . ラベル名
でアクセスします。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

//ラベルでアクセス
print(c.level) //5
print(c.name) //ゲレゲレ
print(c.attack) //100

ラベル名でアクセスできました。
また、ラベルを付けたタプルでも
インデックス番号でアクセスできます。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

//ラベルでアクセス
print(c.level) //5
print(c.name) //ゲレゲレ
print(c.attack) //100

//インデックス番号でアクセスする
print(c.0) //5
print(c.1) //ゲレゲレ
print(c.2) //100
tupleコードimg2

型名だけ宣言して後で要素を入れたい場合も、同様にラベルを付けることができます。
以上 タプル についてでした。

次回は Optional型 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】配列型

配列型とは、コレクション型の一種で複数のデータをまとめて並べたもののことを言います。
この配列に代入した値のことを要素と言い、この要素をインデックス番号という番号で管理します。
例外を除いて、配列に代入する要素は原則全て同じ型でなければなりません。

前回は スコープ について書きました。

今回は 配列型 について書いていこうと思います。

配列型とは

配列型 とは、コレクション型の一種で複数のデータをまとめて並べたもののことを言います。
この配列に代入した値のことを要素と言い、この要素インデックス番号という番号で管理します。
例外を除いて、配列に代入する要素は原則全て同じ型でなければなりません。

配列の書式

配列の型を明示した書式

//書式1
変数、定数名:Array<型名> = [要素, 要素, 要素, ...]

//書式2
変数、定数名:[型名] = [要素, 要素, 要素, ...]

要素全体は大括弧 [ ] で囲って、要素と要素はカンマ , で区切ります。

配列の型を明示しない書式( 型推論 )

//型推論
変数、定数名 = [要素, 要素, 要素, ...]

配列を使った例

//例1
var a:Array<Int> = [1, 2, 3, 4, 5]
print(type(of: a)) //Array<Int>
print(a) //[1, 2, 3, 4, 5]

//例2
var b:[Int] = [1, 2, 3, 4, 5]
print(type(of: b)) //Array<Int>
print(b) //[1, 2, 3, 4, 5]

//例3(型推論)
var c = [1, 2, 3, 4, 5]
print(type(of: c)) //Array<Int>
print(c) //[1, 2, 3, 4, 5]

上の例の 3 種類は書き方が少し違いますが、どれで書いても同じです。

この例は a , b , c という Int型 の配列にそれぞれ、[1,2,3,4,5] と 5 つの要素を代入している例です。

次に 配列a の要素にインデックス番号でアクセスしていきます。

インデックス番号

インデックス番号は 添え字 とも言います。
インデックス番号は最初の要素から順番に 0 , 1 , 2 と番号が振られていきます。 1 からではなく 0 から始まります。


要素にインデックス番号でアクセスする方法

//書き方例1
var a:Array<Int> = [1, 2, 3, 4, 5]
print(type(of: a)) //Array<Int>
print(a) //[1, 2, 3, 4, 5]

//書き方例2
var b:[Int] = [1, 2, 3, 4, 5]
print(type(of: b)) //Array<Int>
print(b) //[1, 2, 3, 4, 5]

//書き方例3(型推論)
var c = [1, 2, 3, 4, 5]
print(type(of: c)) //Array<Int>
print(c) //[1, 2, 3, 4, 5]

//インデックス番号でアクセス
print(a[0]) //1
print(b[0]) //1
print(c[0]) //1

配列名[インデックス番号] とすることで各要素にアクセスすることができます。
配列 a , b , c にはそれぞれ [1,2,3,4,5] と 5 つの要素が代入されています。
インデックス番号は 0 から始まるので 1 つ目の要素にアクセスするには、a[0] とすれば 配列a の 1 つ目の要素にアクセスできます。

Arrayコードimg

要素の結合と演算

String型 の配列であれば要素同士の結合や、数値型の配列であれば要素同士の演算をする事が出来ます。

文字列の要素を結合

//String型の要素を結合する例
var a:[String] = ["Hello.", "Swift!", "World!"]
print(type(of: a)) //Array<String>
print(a) //["Hello.", "Swift!", "World!"]

//結合
print(a[0] + a[1]) //Hello.Swift!
print(a[0] + a[2]) //Hello.World!

数値型の要素を演算

//数値型の要素を演算する例
var b:[Int] = [1, 2, 3]
print(type(of: b)) //Array<Int>
print(b) //[1, 2, 3]

//演算
print(b[0] + b[1]) //3
print(b[1] * b[2]) //6
Arrayコードimg2

多次元配列

多次元配列とは、配列の中に配列を入れ子することを言います。

多次元配列の書き方

//多次元配列の書き方例
var a:[[Int]] = [[1, 2, 3], [4, 5, 6]]
print(type(of: a)) //Array<Array<Int>>
print(a) //[[1, 2, 3], [4, 5, 6]]

配列の中に複数の配列が格納されています。
次はこの多次元配列の要素にアクセスしてみます。

多次元配列のインデックス番号

多次元配列の要素にインデックス番号でアクセスしてみる。

//多次元配列の書き方例
var a:[[Int]] = [[1, 2, 3], [4, 5, 6]]
print(type(of: a)) //Array<Array<Int>>
print(a) //[[1, 2, 3], [4, 5, 6]]

//多次元配列の要素にインデックス番号でアクセス
print(a[0][1]) //2

上の例だと [1,2,3] は 0 番目の配列で [4,5,6] は 1 番目の配列ということになります。したがって a [0][1]配列a の 0 番目の配列の 1 番目の要素ということになるので、 2 が出力されます。

Arrayコードimg3

以上 配列型 についてでした。

次回は 関数 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/