回答編集履歴

4

加筆

2017/10/26 12:46

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -200,6 +200,20 @@
200
200
 
201
201
 
202
202
 
203
+ ###最後の質問について
204
+
205
+
206
+
207
+ > 関数lightは戻り値がDoubleの配列なので、配列light()としてご教授いただいたfor文の中に入れても問題ないでしょうか?
208
+
209
+
210
+
211
+ この質問に関しては答えられないです。質問からは配列brightの扱いが分からないからです(スコープが絡んできます)。その辺りはBuildしてみるなりprintしてみるなりして判断していってください。
212
+
213
+ ただし、配列brightをlight関数内に置いても問題ない場合、質問に対する回答は問題ないになるかと。
214
+
215
+
216
+
203
217
  ###総評と各々の具体的な使い方
204
218
 
205
219
 

3

問題点の認識の違いによる回答の修正

2017/10/26 12:45

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -4,6 +4,80 @@
4
4
 
5
5
  について。アプローチは二つあるかと思います。
6
6
 
7
+ がその前に質問内容についてアプローチが必要です。
8
+
9
+
10
+
11
+ ###返り値がない
12
+
13
+ 配列の各値に関数を適用してその結果を新しく配列に入れるという状態を想定した時、その適用したい関数には返り値が必要になります。ですが質問内容に書かれているbrightValue関数には**返り値がありません**。
14
+
15
+ ちなみに返り値がある関数は
16
+
17
+ ```swift
18
+
19
+ func returnFunction() -> Int {
20
+
21
+ return Int(0)
22
+
23
+ }
24
+
25
+ ```
26
+
27
+
28
+
29
+ 返り値がない関数は
30
+
31
+ ```swift
32
+
33
+ func voidFunction() {
34
+
35
+
36
+
37
+ }
38
+
39
+ ```
40
+
41
+
42
+
43
+ です。
44
+
45
+ 返り値がないのでXcodeから
46
+
47
+ Missing return in a function expected to return 'Double' と言うwarningが出ます。
48
+
49
+ 平たく言うと関数内にあるであろうDoubleの値の返却し損ねてんぞ!って事ですね。
50
+
51
+
52
+
53
+ なのでbrightValue関数に返り値を返すように記述してあげます。
54
+
55
+
56
+
57
+ ```swift
58
+
59
+ func brightValue(gradiation: Double) -> Double {
60
+
61
+ let x = (gradiation-115.97)/60.056
62
+
63
+ return pow(2.718,x)
64
+
65
+ }
66
+
67
+ ```
68
+
69
+
70
+
71
+ これで返り値が返されます。
72
+
73
+
74
+
75
+ 事前にあった問題は解消されたので本題に移って行きます。
76
+
77
+
78
+
79
+ ###どんなアプローチがあるのか
80
+
7
81
 
8
82
 
9
83
  0. ループを回す
@@ -12,17 +86,79 @@
12
86
 
13
87
 
14
88
 
89
+ 以上の二つを考えていくことになります。
90
+
91
+
92
+
15
93
  ###ループを回す
16
94
 
17
- for-in文の中で関数を呼び出し、そのり値を事前に用意しておいたArrayに入れていきます。
95
+ while文もありますが今回はfor-in文の中で関数を呼び出し、そのり値を事前に用意しておいたArrayに入れていきます。
18
-
19
-
20
-
21
- ただ質問に書かれているbrightValue関数には**返り値がない**ので
96
+
22
-
23
-
24
-
97
+
98
+
25
- ```swift
99
+ ```swift
100
+
101
+ var powerArray = [Double]()
102
+
103
+ for index in 0..<bright.count {
104
+
105
+ let value = brightValue(gradiation: bright[index])
106
+
107
+ powerArray.append(value)
108
+
109
+ }
110
+
111
+ ```
112
+
113
+
114
+
115
+ こんな風に書いてあげればpowerArrayの出来上がり。
116
+
117
+
118
+
119
+ ###配列操作
120
+
121
+ もう一つは配列操作を行う方法。配列操作を行う関数はmap関数、reduce関数、filter関数等々色々あります。
122
+
123
+ 今回はmap関数を使います。これは単純にmap関数の中でbrightValue関数を呼び出すだけです。
124
+
125
+
126
+
127
+ ```swift
128
+
129
+ let powerArray = bright.map { brightValue(gradiation: $0) }
130
+
131
+ ```
132
+
133
+
134
+
135
+ ###サンプルコード**(追記)**
136
+
137
+
138
+
139
+ ```swift
140
+
141
+ //: Playground - noun: a place where people can play
142
+
143
+
144
+
145
+ import UIKit
146
+
147
+
148
+
149
+ var bright = [Double]()
150
+
151
+
152
+
153
+ //insert random value into bright
154
+
155
+ bright = (0...10).map { index in
156
+
157
+ return Double(arc4random_uniform(index * index))
158
+
159
+ }
160
+
161
+
26
162
 
27
163
  func brightValue(gradiation: Double) -> Double {
28
164
 
@@ -32,102 +168,16 @@
32
168
 
33
169
  }
34
170
 
35
- ```
171
+
36
-
37
-
38
-
172
+
39
- みたいな感じで返り値を用意してあげます。
173
+ //(1)
40
-
41
- あとはこんな風に
174
+
42
-
43
-
44
-
45
- ```swift
46
-
47
- var powerArray = [Double]()
175
+ var powerArray1 = [Double]()
48
176
 
49
177
  for index in 0..<bright.count {
50
178
 
51
179
  let value = brightValue(gradiation: bright[index])
52
180
 
53
- powerArray.append(value)
54
-
55
- }
56
-
57
- ```
58
-
59
-
60
-
61
- 書いてあげればpowerArrayの出来上がり。
62
-
63
-
64
-
65
- ###配列操作
66
-
67
- もう一つは配列操作を行う方法。
68
-
69
- 今回はmap関数を使います。
70
-
71
-
72
-
73
- 1の場合と同様にbrightValue関数はそのままでは使えないので返り値があるようにしてあげます。んでmap関数の中でbrightValue関数を呼び出せばいいです。
74
-
75
-
76
-
77
- ```swift
78
-
79
- let powerArray = bright.map { brightValue(gradiation: $0) }
80
-
81
- ```
82
-
83
-
84
-
85
- ###サンプルコード**(追記)**
86
-
87
-
88
-
89
- ```swift
90
-
91
- //: Playground - noun: a place where people can play
92
-
93
-
94
-
95
- import UIKit
96
-
97
-
98
-
99
- var bright = [Double]()
100
-
101
-
102
-
103
- //insert random value into bright
104
-
105
- bright = (0...10).map { index in
106
-
107
- return Double(arc4random_uniform(index * index))
108
-
109
- }
110
-
111
-
112
-
113
- func brightValue(gradiation: Double) -> Double {
114
-
115
- let x = (gradiation-115.97)/60.056
116
-
117
- return pow(2.718,x)
118
-
119
- }
120
-
121
-
122
-
123
- //(1)
124
-
125
- var powerArray1 = [Double]()
126
-
127
- for index in 0..<bright.count {
128
-
129
- let value = brightValue(gradiation: bright[index])
130
-
131
181
  powerArray1.append(value)
132
182
 
133
183
  }

2

追記

2017/10/26 07:12

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -82,6 +82,74 @@
82
82
 
83
83
 
84
84
 
85
+ ###サンプルコード**(追記)**
86
+
87
+
88
+
89
+ ```swift
90
+
91
+ //: Playground - noun: a place where people can play
92
+
93
+
94
+
95
+ import UIKit
96
+
97
+
98
+
99
+ var bright = [Double]()
100
+
101
+
102
+
103
+ //insert random value into bright
104
+
105
+ bright = (0...10).map { index in
106
+
107
+ return Double(arc4random_uniform(index * index))
108
+
109
+ }
110
+
111
+
112
+
113
+ func brightValue(gradiation: Double) -> Double {
114
+
115
+ let x = (gradiation-115.97)/60.056
116
+
117
+ return pow(2.718,x)
118
+
119
+ }
120
+
121
+
122
+
123
+ //(1)
124
+
125
+ var powerArray1 = [Double]()
126
+
127
+ for index in 0..<bright.count {
128
+
129
+ let value = brightValue(gradiation: bright[index])
130
+
131
+ powerArray1.append(value)
132
+
133
+ }
134
+
135
+ print(powerArray1)
136
+
137
+
138
+
139
+ //(2)
140
+
141
+ let powerArray2 = bright.map { brightValue(gradiation: $0) }
142
+
143
+ print(powerArray2)
144
+
145
+
146
+
147
+ powerArray1 == powerArray2 //true
148
+
149
+ ```
150
+
151
+
152
+
85
153
  ###総評と各々の具体的な使い方
86
154
 
87
155
 

1

誤字修正

2017/10/26 03:34

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- ただ質問に書かれているbrightValue関数には**り値がない**ので
21
+ ただ質問に書かれているbrightValue関数には**り値がない**ので
22
22
 
23
23
 
24
24