回答編集履歴
5
訂正
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
訂正
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
訂正
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
訂正
answer
CHANGED
@@ -7,13 +7,13 @@
|
|
7
7
|
|
8
8
|
class ViewController: UIViewController {
|
9
9
|
|
10
|
-
let fileNames = ["
|
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("
|
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
追記
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() {
|