回答編集履歴

4

もしくは。

2016/08/26 03:01

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -122,7 +122,7 @@
122
122
 
123
123
 
124
124
 
125
- sorted[section][0]でセクションの内容、
125
+ sorted[section][0]でセクションの内容(もしくはarrayYearMonth[section])、
126
126
 
127
127
  sorted[section][row+1]でセルの内容を取り出せます。
128
128
 

3

print修正。

2016/08/26 03:01

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -68,7 +68,9 @@
68
68
 
69
69
  var sorted = [Array<String>]()
70
70
 
71
- print("sorted(initialize):", sorted)
71
+ print(sorted)
72
+
73
+ //=> []
72
74
 
73
75
 
74
76
 
@@ -80,7 +82,9 @@
80
82
 
81
83
  }.unique()
82
84
 
83
- print("arrayYearMonth", arrayYearMonth)
85
+ print(arrayYearMonth)
86
+
87
+ //=> ["2016/08", "2016/07", "2016/05", "2015/02"]
84
88
 
85
89
 
86
90
 
@@ -92,7 +96,9 @@
92
96
 
93
97
  }
94
98
 
95
- print("sorted(initialized):", sorted)
99
+ print(sorted)
100
+
101
+ //=> [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
96
102
 
97
103
 
98
104
 
@@ -108,17 +114,9 @@
108
114
 
109
115
  }
110
116
 
111
- print("sorted:", sorted)
117
+ print(sorted)
112
118
 
113
-
114
-
115
- //=> sorted(initialize): []
116
-
117
- //=> arrayYearMonth ["2016/08", "2016/07", "2016/05", "2015/02"]
118
-
119
- //=> sorted(initialized): [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
120
-
121
- //=> sorted: [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
119
+ //=> [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
122
120
 
123
121
  ```
124
122
 

2

やり直し。

2016/08/26 02:59

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1,21 +1,131 @@
1
- ```swift
1
+ # 目標
2
-
3
- let date = "2016/08/26"
4
2
 
5
3
 
6
4
 
7
- //前から9文字以降を取り出
5
+ 最終的にこういう形を指しま
8
6
 
9
- print(date.substringFromIndex(date.startIndex.advancedBy(9-1))) //0-originなので-1
10
-
11
- //=> 26
7
+ 色々と都合が良かったので年月と日を同じ配列に入れることにしました。
12
8
 
13
9
 
14
10
 
15
- //後ろから2文字を切り出す
11
+ ```
16
12
 
17
- print(date.substringFromIndex(date.endIndex.advancedBy(-2)))
13
+ [
18
14
 
15
+ ["2016/08", "26", "26", "26", "01"],
16
+
19
- //=> 26
17
+ ["2016/07", "27"],
18
+
19
+ ["2016/05", "26", "25"],
20
+
21
+ ["2016/02", "21"],
22
+
23
+ ]
20
24
 
21
25
  ```
26
+
27
+
28
+
29
+ # コード
30
+
31
+
32
+
33
+ 教えていただいたuniqueを使ってます。
34
+
35
+ もっとSwiftらしいカッコイイ書き方が出来るかも知れませんが、
36
+
37
+ ヘッポコなのでこんな感じです。
38
+
39
+
40
+
41
+ ```swift
42
+
43
+ //元データ(日付順に並んでいるものとします)
44
+
45
+ let array = [
46
+
47
+ "2016/08/26",
48
+
49
+ "2016/08/26",
50
+
51
+ "2016/08/26",
52
+
53
+ "2016/08/01",
54
+
55
+ "2016/07/27",
56
+
57
+ "2016/05/26",
58
+
59
+ "2016/05/25",
60
+
61
+ "2015/02/21",
62
+
63
+ ]
64
+
65
+
66
+
67
+ //振り分けArray
68
+
69
+ var sorted = [Array<String>]()
70
+
71
+ print("sorted(initialize):", sorted)
72
+
73
+
74
+
75
+ //重複削除済みの年月Arrayを生成
76
+
77
+ let arrayYearMonth = array.map {
78
+
79
+ $0.substringToIndex($0.startIndex.advancedBy(7))
80
+
81
+ }.unique()
82
+
83
+ print("arrayYearMonth", arrayYearMonth)
84
+
85
+
86
+
87
+ //振り分けArrayを初期化(先頭に年月を入れておく)
88
+
89
+ for yearMonth in arrayYearMonth {
90
+
91
+ sorted.append([yearMonth])
92
+
93
+ }
94
+
95
+ print("sorted(initialized):", sorted)
96
+
97
+
98
+
99
+ //日を振り分け
100
+
101
+ for date in array {
102
+
103
+ let yearMonth: String = date.substringToIndex(date.startIndex.advancedBy(7))
104
+
105
+ let day: String = date.substringFromIndex(date.endIndex.advancedBy(-2))
106
+
107
+ sorted[arrayYearMonth.indexOf(yearMonth)!].append(day)
108
+
109
+ }
110
+
111
+ print("sorted:", sorted)
112
+
113
+
114
+
115
+ //=> sorted(initialize): []
116
+
117
+ //=> arrayYearMonth ["2016/08", "2016/07", "2016/05", "2015/02"]
118
+
119
+ //=> sorted(initialized): [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
120
+
121
+ //=> sorted: [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
122
+
123
+ ```
124
+
125
+
126
+
127
+ sorted[section][0]でセクションの内容、
128
+
129
+ sorted[section][row+1]でセルの内容を取り出せます。
130
+
131
+

1

前からも。

2016/08/26 02:45

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1,11 +1,21 @@
1
1
  ```swift
2
2
 
3
- let date = "yyyy/MM/dd"
3
+ let date = "2016/08/26"
4
4
 
5
+
6
+
7
+ //前から9文字目以降を取り出す
8
+
9
+ print(date.substringFromIndex(date.startIndex.advancedBy(9-1))) //0-originなので-1
10
+
11
+ //=> 26
12
+
13
+
14
+
5
- //後ろから文字を切り出す
15
+ //後ろから2文字を切り出す
6
16
 
7
17
  print(date.substringFromIndex(date.endIndex.advancedBy(-2)))
8
18
 
9
- //=> dd
19
+ //=> 26
10
20
 
11
21
  ```