こないだ初めてswiftでタプル型というものを知りました。
使い方はなんとなくわかったのですが長所や短所が明確にわかりません。
長所と短所はなんでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
(以下fuzzballさんのアドバイスを受けてからの修正回答になります)
タプルと配列を比較してメリットデメリットをみていきます。
が、最初に特殊なAny型について少々説明をします。
Swiftには色々な型がありますが特殊な型としてAny型というものがあります。このAny型で宣言された変数や定数はどんな型の値でも入れられるようになります。ですがどんな値でも入れられる、ということは危険性も孕んでおり中身が何なのかが簡単には分からない、という反面も持ち合わせています。ですのでこんなことも可能です。
swift
1var anyTypeValue: Any = 1 2anyTypeValue = "String" 3anyTypeValue = 10.5
このAny型を使った配列というのもあり
swift
1let anyTypeArray: [Any] = [1, "string", 100000.5]
こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
(fuzzballさんのコメントを受けて再度修正です)
anyTypeArrayの中身を添字で取り出した時、anyTypeArray[0]はInt型、anyTypeArray[1]はString型、anyTypeArray[2]はDouble型の値となります。ただanyTypeArrayの中身を取り出すまで何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
一方タプルでは
swift
1let tuple = (100, "hoge", 5.5)
色々な型の値が入ったタプルというものが簡単に出来ます。こちらはタプルの中の値の型はわかっており、上記の例だとInt, String, Double型になります。
ここでfuzzballさんのコメントを引用させていただくと
・タプルは「違う型で複数の値を格納」するのが簡単
と言えます。これがタプルのメリットです。
また配列は配列操作を行えますが、タプルではそれができません。
配列操作とは.enumarated
や.map
、.foreach
等配列の中身各々に対して何らかの操作を行うものです。詳しくは配列操作で検索すれば色々出てきますので割愛させていただきます。
下記は一例です。
swift
1stringArray.map{print($0)} //OK この$0はstringArrayの配列の中身一つ一つを表しています。 2tuple.map{print($0)} //NG
配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。これは配列が配列である大きなメリットです。
タプルと配列の似ている点として、どちらも(雑な表現ですが)数字を使って取り出すことができます。上記の二例をここでまた引っ張り出しますが
swift
1let anyTypeArray: [Any] = [1, "string", 100000.5] 2let tuple = (100, "hoge", 5.5) 3print(anyTypeArray[0] //1 4print(tuple.0) //100
こんな感じで取り出せます。
また両方のメリットを享受するために
swift
1let tupleArray: [(Int, String)] = [(0, "あいうえお"), (1, "かきくけこ")]
なんて特定のタプルの配列を作ることもあります(この場合someArray.enumarated()とした方が良いですが分かりやすさのためこんな形にしています)。
投稿2018/08/31 06:11
編集2018/08/31 09:40総合スコア1349
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/31 06:19
2018/08/31 06:27
2018/08/31 06:34
2018/08/31 07:45
2018/08/31 08:06
2018/08/31 08:20 編集
2018/08/31 09:15
2018/08/31 09:27
2018/08/31 09:42
2018/08/31 09:47
2018/08/31 09:49 編集
2018/08/31 09:57
2018/08/31 09:57
2018/09/03 03:55 編集
2018/09/02 23:54
2018/09/03 03:59
2018/09/03 04:08
2018/09/03 04:52
2018/09/03 05:10