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

回答編集履歴

4

もしくは。

2016/08/26 03:01

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -60,5 +60,5 @@
60
60
  //=> [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
61
61
  ```
62
62
 
63
- sorted[section][0]でセクションの内容、
63
+ sorted[section][0]でセクションの内容(もしくはarrayYearMonth[section])、
64
64
  sorted[section][row+1]でセルの内容を取り出せます。

3

print修正。

2016/08/26 03:01

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -33,19 +33,22 @@
33
33
 
34
34
  //振り分けArray
35
35
  var sorted = [Array<String>]()
36
- print("sorted(initialize):", sorted)
36
+ print(sorted)
37
+ //=> []
37
38
 
38
39
  //重複削除済みの年月Arrayを生成
39
40
  let arrayYearMonth = array.map {
40
41
  $0.substringToIndex($0.startIndex.advancedBy(7))
41
42
  }.unique()
42
- print("arrayYearMonth", arrayYearMonth)
43
+ print(arrayYearMonth)
44
+ //=> ["2016/08", "2016/07", "2016/05", "2015/02"]
43
45
 
44
46
  //振り分けArrayを初期化(先頭に年月を入れておく)
45
47
  for yearMonth in arrayYearMonth {
46
48
  sorted.append([yearMonth])
47
49
  }
48
- print("sorted(initialized):", sorted)
50
+ print(sorted)
51
+ //=> [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
49
52
 
50
53
  //日を振り分け
51
54
  for date in array {
@@ -53,12 +56,8 @@
53
56
  let day: String = date.substringFromIndex(date.endIndex.advancedBy(-2))
54
57
  sorted[arrayYearMonth.indexOf(yearMonth)!].append(day)
55
58
  }
56
- print("sorted:", sorted)
59
+ print(sorted)
57
-
58
- //=> sorted(initialize): []
59
- //=> arrayYearMonth ["2016/08", "2016/07", "2016/05", "2015/02"]
60
- //=> sorted(initialized): [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
61
- //=> sorted: [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
60
+ //=> [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
62
61
  ```
63
62
 
64
63
  sorted[section][0]でセクションの内容、

2

やり直し。

2016/08/26 02:59

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -1,11 +1,65 @@
1
+ # 目標
2
+
3
+ 最終的にこういう形を目指します。
4
+ 色々と都合が良かったので年月と日を同じ配列に入れることにしました。
5
+
6
+ ```
7
+ [
8
+ ["2016/08", "26", "26", "26", "01"],
9
+ ["2016/07", "27"],
10
+ ["2016/05", "26", "25"],
11
+ ["2016/02", "21"],
12
+ ]
13
+ ```
14
+
15
+ # コード
16
+
17
+ 教えていただいたuniqueを使ってます。
18
+ もっとSwiftらしいカッコイイ書き方が出来るかも知れませんが、
19
+ ヘッポコなのでこんな感じです。
20
+
1
21
  ```swift
22
+ //元データ(日付順に並んでいるものとします)
23
+ let array = [
2
- let date = "2016/08/26"
24
+ "2016/08/26",
25
+ "2016/08/26",
26
+ "2016/08/26",
27
+ "2016/08/01",
28
+ "2016/07/27",
29
+ "2016/05/26",
30
+ "2016/05/25",
31
+ "2015/02/21",
32
+ ]
3
33
 
4
- //前から9文字目以降を取り出す
5
- print(date.substringFromIndex(date.startIndex.advancedBy(9-1))) //0-originなので-1
6
- //=> 26
34
+ //振り分けArray
35
+ var sorted = [Array<String>]()
36
+ print("sorted(initialize):", sorted)
7
37
 
38
+ //重複削除済みの年月Arrayを生成
39
+ let arrayYearMonth = array.map {
40
+ $0.substringToIndex($0.startIndex.advancedBy(7))
41
+ }.unique()
42
+ print("arrayYearMonth", arrayYearMonth)
43
+
44
+ //振り分けArrayを初期化(先頭に年月を入れておく)
45
+ for yearMonth in arrayYearMonth {
46
+ sorted.append([yearMonth])
47
+ }
48
+ print("sorted(initialized):", sorted)
49
+
8
- //後ろから2文字出す
50
+ //分け
51
+ for date in array {
52
+ let yearMonth: String = date.substringToIndex(date.startIndex.advancedBy(7))
9
- print(date.substringFromIndex(date.endIndex.advancedBy(-2)))
53
+ let day: String = date.substringFromIndex(date.endIndex.advancedBy(-2))
54
+ sorted[arrayYearMonth.indexOf(yearMonth)!].append(day)
55
+ }
56
+ print("sorted:", sorted)
57
+
10
- //=> 26
58
+ //=> sorted(initialize): []
59
+ //=> arrayYearMonth ["2016/08", "2016/07", "2016/05", "2015/02"]
60
+ //=> sorted(initialized): [["2016/08"], ["2016/07"], ["2016/05"], ["2015/02"]]
61
+ //=> sorted: [["2016/08", "26", "26", "26", "01"], ["2016/07", "27"], ["2016/05", "26", "25"], ["2015/02", "21"]]
11
- ```
62
+ ```
63
+
64
+ sorted[section][0]でセクションの内容、
65
+ sorted[section][row+1]でセルの内容を取り出せます。

1

前からも。

2016/08/26 02:45

投稿

fuzzball
fuzzball

スコア16733

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