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

回答編集履歴

5

訂正

2020/05/30 22:39

投稿

退会済みユーザー
answer CHANGED
@@ -3,6 +3,7 @@
3
3
  ---
4
4
  備忘目的追記
5
5
 
6
+ ```swift
6
7
  import UIKit
7
8
 
8
9
  class ViewController: UIViewController {
@@ -12,12 +13,12 @@
12
13
  override func viewDidLoad() {
13
14
  super.viewDidLoad()
14
15
 
15
- print(fileNames.newFileName)
16
+ print(fileNames.newFileName) // => "fileName_004"
16
17
  }
17
18
  }
18
19
 
19
20
  extension String {
20
-
21
+ // 同一接頭句でないと連番の意味が薄れるが念の為。
21
22
  var numberStr: String {
22
23
 
23
24
  guard let regex = try? NSRegularExpression(pattern: "^*[\d]+$", options: []) else {
@@ -56,6 +57,7 @@
56
57
  }
57
58
  }
58
59
 
60
+ ```
59
61
  ---
60
62
 
61
63
  ```swift

4

訂正

2020/05/30 22:39

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,63 @@
1
1
  playground調子が悪かったので…
2
2
 
3
+ ---
4
+ 備忘目的追記
3
5
 
6
+ import UIKit
4
7
 
8
+ class ViewController: UIViewController {
9
+
10
+ let fileNames = ["03", "fileName_094", "fileName_056", "BBB", "45", "fileName_001", "fileName_002", "fileName_005"]
11
+
12
+ override func viewDidLoad() {
13
+ super.viewDidLoad()
14
+
15
+ print(fileNames.newFileName)
16
+ }
17
+ }
18
+
19
+ extension String {
20
+
21
+ var numberStr: String {
22
+
23
+ guard let regex = try? NSRegularExpression(pattern: "^*[\d]+$", options: []) else {
24
+ return ""
25
+ }
26
+
27
+ let results = regex.matches(in: self, options: [], range: NSMakeRange(0, self.count))
28
+
29
+ var str: String = ""
30
+
31
+ for i in 0 ..< results.count{
32
+ for j in 0 ..< results[i].numberOfRanges{
33
+ let range = results[i].range(at: j)
34
+ str.append((self as NSString).substring(with: range))
35
+ }
36
+ }
37
+ return str
38
+ }
39
+ }
40
+
41
+ extension Array where Element == String {
42
+
43
+ var newFileName: String {
44
+
45
+ let prefixStr: String = "fileName_"
46
+
47
+ let maxDigit = self.map { $0.numberStr.count }.max() ?? 1
48
+
49
+ let suffixNumbers: [Int] = self.map { Int($0.numberStr) ?? 0 }.sorted(by: <)
50
+
51
+ let newSuffixNumber: String
52
+ = String(format: "%0(maxDigit)d", ((1...).lazy.map { $0 }.first { !suffixNumbers.contains($0) }) ?? 0 )
53
+
54
+ return prefixStr + newSuffixNumber
55
+
56
+ }
57
+ }
58
+
59
+ ---
60
+
5
61
  ```swift
6
62
  import UIKit
7
63
 

3

訂正

2020/05/30 22:36

投稿

退会済みユーザー
answer CHANGED
@@ -51,6 +51,11 @@
51
51
 
52
52
  var fileNumber: String? {
53
53
 
54
+ // 配列が空だったら? -> 1を返す?
55
+      // ファイル名に数値がなかったら -> 1を返す?
56
+ // 桁数調整(入ってくる連番の桁数とのかねあいも考慮)
57
+ // 最終的にはStringを返す?
58
+
54
59
  let numArray: [Int] = self.map { ($0.number ?? 0) }.sorted(by: <)
55
60
 
56
61
  guard let max = numArray.max() else { return nil }

2

訂正

2020/05/30 10:23

投稿

退会済みユーザー
answer CHANGED
@@ -7,13 +7,13 @@
7
7
 
8
8
  class ViewController: UIViewController {
9
9
 
10
- let fileNames = ["AA003", "094", "556", "BBB", "DE45", "BB001", "CCDFR002", "005", "kaegei990785304743", "08307320683"]
10
+ let fileNames = ["AA003y", "094", "556", "BBB", "DE45", "BB001", "CCDFR002", "005", "kaegei990785304743", "08307320683"]
11
11
 
12
12
 
13
13
  override func viewDidLoad() {
14
14
  super.viewDidLoad()
15
15
 
16
- print("num: (fileNames.fileNumber)") => num: Optional("4")
16
+ print("num: (fileNames.fileNumber)") => num: Optional("3")
17
17
 
18
18
 
19
19
  }
@@ -23,7 +23,7 @@
23
23
  extension String {
24
24
 
25
25
  var number: Int? {
26
-
26
+ // 正規表現わかんない
27
27
  guard let regex = try? NSRegularExpression(pattern: "^*[\d]+$", options: []) else {
28
28
  return nil
29
29
  }

1

追記

2020/05/30 10:16

投稿

退会済みユーザー
answer CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  class ViewController: UIViewController {
9
9
 
10
- let fileNames = ["AA003", "094", "556", "BBB", "DE45", "BB001", "CCDFR002", "005"]
10
+ let fileNames = ["AA003", "094", "556", "BBB", "DE45", "BB001", "CCDFR002", "005", "kaegei990785304743", "08307320683"]
11
11
 
12
12
 
13
13
  override func viewDidLoad() {