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

回答編集履歴

2

コード追加

2020/05/18 09:24

投稿

TsukubaDepot
TsukubaDepot

スコア5086

answer CHANGED
@@ -2,10 +2,46 @@
2
2
 
3
3
  `data`に入っているデータ形式をSwiftでつかおうとすれば辞書(型)に相当します(pythonもそうかもしれません)。
4
4
 
5
- `cumax()`(累積最大値)を求めるメソッドは標準ではなさそうなので自分で実装するか、あるいは誰かが作ったものを流用することになると思います。
5
+ `cummax()`(累積最大値)を求めるメソッドは標準ではなさそうなので自分で実装するか、あるいは誰かが作ったものを流用することになると思います。
6
6
 
7
7
  整形して表示することも標準だと力不足なので自分で実装する必要があると思います。
8
8
 
9
9
  グラフ表示も何かしらのフレームワーク(ライブラリ)を使うことになるとおもいます。
10
10
 
11
- 厄介そうなのは、辞書に入ったデータを`key`(`"timestamp"`など)で取り出すときにオプショナル型になること、また上記のデータ形式だと`Dictionary<String, Array<Any>>`型となり、`value`を取り出すときにダウンキャストしなければならない点がありそうです。
11
+ 厄介そうなのは、辞書に入ったデータを`key`(`"timestamp"`など)で取り出すときにオプショナル型になること、また上記のデータ形式だと`Dictionary<String, Array<Any>>`型となり、`value`を取り出すときにダウンキャストしなければならない点がありそうです。
12
+
13
+ ---
14
+ 少しベタな書き方かもしれませんが、たとえばこんな感じで表示することは可能です。
15
+ 辞書に新しく `cummax` というキーを追加して、そこに累積最大値を入れています。
16
+
17
+ なるべくオプショナル型を意識しないで操作するとなるとこんな感じになると思います。
18
+
19
+ Playground で確認しました。
20
+
21
+ ```swift
22
+ import UIKit
23
+
24
+ var data = [
25
+ "tiemstamp": ["00:00", "00:01", "00:02", "00:03", "00:04", "00:05", "00:06", "00:07", "00:08", "00:09",
26
+ "00:10", "00:11", "00:12", "00:13", "00:14", "00:15", "00:16", "00:17", "00:18", "00:19", "00:20"],
27
+ "data": [0, 2, 3, 4, 5, 6, 2, 4, 6, 7, 2, 6, 5, 8, 4, 5, 6, 8, 9, 5, 10]
28
+ ]
29
+
30
+ if let array = data["data"] as? [Int] {
31
+ // 初期値
32
+ var max = array[0]
33
+ data["cummax"] = [max]
34
+
35
+ for i in 1..<array.count {
36
+ let cur = array[i]
37
+
38
+ max = max > cur ? max : cur
39
+ data["cummax"]?.append(max)
40
+ }
41
+
42
+ print("\ttimestamp\tdata\tcummax")
43
+ for i in 0..<array.count {
44
+ print("(i)\t(data["tiemstamp"]![i])\t\t(data["data"]![i])\t\t(data["cummax"]![i])")
45
+ }
46
+ }
47
+ ```

1

誤字の修正

2020/05/18 09:24

投稿

TsukubaDepot
TsukubaDepot

スコア5086

answer CHANGED
@@ -8,4 +8,4 @@
8
8
 
9
9
  グラフ表示も何かしらのフレームワーク(ライブラリ)を使うことになるとおもいます。
10
10
 
11
- 厄介そうなのは、辞書に入ったデータを`key`(`"timestamp"`など)で取り出すときにオプショナル型になること、また上記のデータ形式だと`Dictionary<String, Any>`型となり、`value`を取り出すときにダウンキャストしなければならない点がありそうです。
11
+ 厄介そうなのは、辞書に入ったデータを`key`(`"timestamp"`など)で取り出すときにオプショナル型になること、また上記のデータ形式だと`Dictionary<String, Array<Any>>`型となり、`value`を取り出すときにダウンキャストしなければならない点がありそうです。