質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

1305閲覧

tupleの仕様について

mm--_--mm

総合スコア113

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/11/10 01:10

いつもお世話になっております。

表題の件ですが、tupleの変数の宣言の方法で下記のようなコード

swift

1var (a,b):(Int,Int) = (1,2) 2print(a) //出力結果は1 3print(b) //出力結果は2 4 5a = 3 6b = 4 7//値を書き換える事は可能 8print(a) //出力結果は3 9print(b) //出力結果は4 10////// 11

でも宣言が可能だという事を知ったのですが、この方法で宣言するメリットってなんでしょうか?
このやり方だとa,bそれぞれに一つずつしか値を代入する事しかできませんし
この書き方を使うタイミングがよくわかりません。

何か検討違いな質問していたら申し訳ないのですがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/11/10 03:00

「a,bそれぞれに一つずつしか値を代入する事しかできません」というのはどういう意味ですか?
guest

回答3

0

ベストアンサー

例文は、

Swift

1let t = (2, 3) 2var a = t.0 3var b = t.1 4```と同じ意味です。ですから、タプルを返す関数の戻り値を別の変数に入れたいときに使えばよいのではないでしょうか。 5 例えば、 6```Swift 7/// 平均と標準偏差を求める関数 8func meanAndSd(data: [MyType]) -> (mean: Float, sd: Float) { 9 (中略) 10} 11 12let data: [MyType] = (中略) 13var result = meanAndSd(data) // (1) 14var (mean, sd) = meanAndSd(data) // (2) 15```とした場合、 16(1)の場合、これ以降毎回 result.mean, result.sd(またはresult.0, result.1)と書く必要がありますが、(2)の場合でしたら、mean, sdと書くだけで済みます。

投稿2016/11/10 02:26

AOKINAO

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mm--_--mm

2016/11/10 05:07

ご回答いただきありがとうございます。記述して頂いたソースコード内でお聞きしたいことがあるのですが、関数定義している箇所のmeanAndSd(data:[MyType])のMyTypeを[]で囲っているのはどういう意味なのでしょうか?
fuzzball

2016/11/10 06:13

それはMyType型の配列という意味です。[Int]ならInt型の配列。
guest

0

仕様的に可能であるからといって、必ずしもメリットがあるとは限りませんが、

swift

1var (a, b) = (1, 2) 2print(a, b) 3//=> 1 2 4 5(a, b) = (b, a) //swap 6print(a, b) 7//=> 2 1

こういうのはちょっと便利って思いました。

投稿2016/11/10 01:37

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mm--_--mm

2016/11/10 05:10

ご回答いただきありがとうございます。なるほど..そんなこともできるのですね。確かに便利ですね! あと、質問の修正依頼についてですが、この書き方だとaやbの中に[1,2,3,4,5]と複数の値を代入することができないという意味です。わかりづらくて申し訳ありません。
fuzzball

2016/11/10 06:09

配列(Array)という意味でしょうか? ArrayでもDictionaryでも出来ますよ。 var (a, b) = ([1,2,3,4,5], ["one":1, "two":2, "three":3]) print(a, b) //=> [1, 2, 3, 4, 5] ["one": 1, "three": 3, "two": 2]
mm--_--mm

2016/11/10 06:38

配列のことです!そのような方法でできるとは... しかし、自分でちょっと試してみたのですが、aの中に入れた[1,2,3,4,5]の中の2を出力したい場合、print(a.1)と書いてもエラーになってしまうのですがこのような場合はどうすれば良いのでしょうか...?
fuzzball

2016/11/10 06:40

配列ですからa[1]です。(もうちょっと基本的なことを勉強した方が良いかと)
mm--_--mm

2016/11/10 06:59

タプルに気を取られて配列だという事が頭から抜けました...確かにa[1]で表示する事が出来ました。 おっしゃる通り基本的なところから勉強します...くだらない事ばかり聞いてすみませんでした....
guest

0

これ「var (a,b):(Int,Int) = (1,2)」はタプルの値を変数に代入しているだけなので、タプルの機能というところではないかと思います。
本来タプルは複数の要素があるものを一つにまとめるためのもので、他言語ではenum的な位置づけかと思います。
ので、曜日 mondey,月曜・・・のような使い方でまとめて取り扱えますよ的メリットがあります。

投稿2016/11/10 01:25

matsumoto

総合スコア590

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mm--_--mm

2016/11/10 05:17

ご回答いただきありがとうございます。タプルの機能ではないのですね。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問