teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

修正

2018/08/31 09:40

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -16,7 +16,9 @@
16
16
  let anyTypeArray: [Any] = [1, "string", 100000.5]
17
17
  ```
18
18
 
19
- こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
19
+ こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は~~全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。~~
20
+ (fuzzballさんのコメントを受けて再度修正です)
21
+ anyTypeArrayの中身を添字で取り出した時、anyTypeArray[0]はInt型、anyTypeArray[1]はString型、anyTypeArray[2]はDouble型の値となります。ただanyTypeArrayの中身を取り出すまで何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
20
22
 
21
23
  一方タプルでは
22
24
 

3

修正

2018/08/31 09:40

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -48,8 +48,8 @@
48
48
  ```swift
49
49
  let anyTypeArray: [Any] = [1, "string", 100000.5]
50
50
  let tuple = (100, "hoge", 5.5)
51
- print(anyTypeArray[0] //1 こちらは添字で
51
+ print(anyTypeArray[0] //1
52
- print(tuple.0) //100 こちらはindexで
52
+ print(tuple.0) //100
53
53
  ```
54
54
 
55
55
  こんな感じで取り出せます。

2

修正

2018/08/31 09:16

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -1,24 +1,59 @@
1
- 前提:Any型は今扱いせん。
1
+ (以下fuzzballさんのアドバイスを受けてからの修正答になりす)
2
2
 
3
+ タプルと配列を比較してメリットデメリットをみていきます。
4
+
5
+ が、最初に特殊なAny型について少々説明をします。
6
+ Swiftには色々な型がありますが特殊な型としてAny型というものがあります。このAny型で宣言された変数や定数はどんな型の値でも入れられるようになります。ですがどんな値でも入れられる、ということは危険性も孕んでおり中身が何なのかが簡単には分からない、という反面も持ち合わせています。ですのでこんなことも可能です。
3
7
  ```swift
8
+ var anyTypeValue: Any = 1
4
- let tuple = (100, "hoge")
9
+ anyTypeValue = "String"
5
- let stringArray: [String] = ["hoge hoge", "foo", "bar"]
6
- let IntArray: [Int] = [1, 2, 3, 4, 5]
10
+ anyTypeValue = 10.5
7
11
  ```
8
12
 
9
- 配列は特定の型を限定して入れられるのに対してタプルは型を限定せずに入れられます。
10
- た配列は配列操作を行うのが容易ですが、タプルではそれができません。
13
+ このAny型を使った配列というのもあり
11
- 配列操作とは```.enumarated```や```.map```、```.foreach```等配列の中身各々に対して何らかの操作を行うものです。詳しくは配列操作で検索すれば色々出てきます。
12
14
 
15
+ ```swift
16
+ let anyTypeArray: [Any] = [1, "string", 100000.5]
17
+ ```
18
+
19
+ こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
20
+
21
+ 一方タプルでは
22
+
23
+ ```swift
24
+ let tuple = (100, "hoge", 5.5)
25
+ ```
26
+
27
+ 色々な型の値が入ったタプルというものが簡単に出来ます。こちらはタプルの中の値の型はわかっており、上記の例だとInt, String, Double型になります。
28
+ ここでfuzzballさんのコメントを引用させていただくと
29
+
30
+ > ・タプルは「違う型で複数の値を格納」するのが簡単
31
+
32
+ と言えます。これがタプルのメリットです。
33
+
34
+ また配列は配列操作を行えますが、タプルではそれができません。
35
+ 配列操作とは```.enumarated```や```.map```、```.foreach```等配列の中身各々に対して何らかの操作を行うものです。詳しくは配列操作で検索すれば色々出てきますので割愛させていただきます。
36
+
13
37
  下記は一例です。
14
38
 
15
39
  ```swift
16
- stringArray.map{print($0)} //OK
40
+ stringArray.map{print($0)} //OK この$0はstringArrayの配列の中身一つ一つを表しています。
17
41
  tuple.map{print($0)} //NG
18
42
  ```
19
43
 
20
- 配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。
44
+ 配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。これは配列が配列である大きなメリットです。
21
45
 
46
+ タプルと配列の似ている点として、どちらも(雑な表現ですが)数字を使って取り出すことができます。上記の二例をここでまた引っ張り出しますが
47
+
48
+ ```swift
49
+ let anyTypeArray: [Any] = [1, "string", 100000.5]
50
+ let tuple = (100, "hoge", 5.5)
51
+ print(anyTypeArray[0] //1 こちらは添字で
52
+ print(tuple.0) //100 こちらはindexで
53
+ ```
54
+
55
+ こんな感じで取り出せます。
56
+
22
57
  また両方のメリットを享受するために
23
58
 
24
59
  ```swift

1

修正

2018/08/31 09:15

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -15,6 +15,7 @@
15
15
  ```swift
16
16
  stringArray.map{print($0)} //OK
17
17
  tuple.map{print($0)} //NG
18
+ ```
18
19
 
19
20
  配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。
20
21