できること
スペース埋め、ゼロ埋め、左寄せ
"ABC"
->"__ABC"
"ABC"
->"00ABC"
"ABC"
->"ABC__"
n文字ごとに区切る
"ABCDEFG"
->["AB", "CD", "EF", "G"]
重複する要素ががあるかないか
["A", "B", "C"]
->false
["A", "A", "B"]
->true
配列を区切って二次元配列にする
["A", "B", "C", "D", "E", "F", "G"]
->
[["A", "B"], ["C", "D"], ["E", "F"], ["G"]]
要素数チェックをしながらオプショナル型で取り出す
["A", "B", "C"][at: 2]
->"C"
(Optional)
["A", "B", "C"][at: 3]
->nil
コピペ用
それぞれ独立しているので、欲しいやつだけコピペしていってね
Extension.swift
// 1. スペース埋め、ゼロ埋め、左寄せ
extension String {
func padding(to count: Int, with pad: String = " ", isTrailing: Bool = true) -> String {
let main = String(self.prefix(count))
let pads = String(repeating: pad, count: count - main.count)
return isTrailing ? (pads + main) : (main + pads)
}
}
// 2. n文字ごとに区切る
extension String {
func split(by count: Int) -> [String] {
let arrayValue = Array(self)
if arrayValue.isEmpty { return [] }
var parent: [[Element]] = []
for i in 1 ... arrayValue.count {
if (i % count == 0) {
parent.append(arrayValue[(i - count)...(i - 1)].map{$0})
}
}
if arrayValue.count % count != 0 { parent.append(arrayValue.suffix(arrayValue.count % count)) }
return parent.map({String($0)})
}
}
// 3. 重複する要素ががあるかないか
extension Array where Element: Hashable {
var hasDuplicated: Bool {
return Set(self).count != self.count
}
}
// 4. 配列を区切って二次元配列にする
extension Array {
func split(by count:Int) -> [[Element]] {
if self.isEmpty { return [] }
var parent: [[Element]] = []
for i in 1 ... self.count {
if (i % count == 0) {
parent.append(self[(i - count)...(i - 1)].map{$0})
}
}
if self.count % count != 0 { parent.append(self.suffix(self.count % count)) }
return parent
}
}
// 5. 要素数チェックをしながらオプショナル型で取り出す
extension Array {
/// Optional<Elemnt> として取り出す
subscript (at index: Index) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}
使い方
Sample.swift
// 1. スペース埋め、ゼロ埋め、左寄せ
let a = "ABC".padding(to: 5)
let b = "ABC".padding(to: 5, with: "0")
let c = "ABC".padding(to: 5, isTrailing: false)
let d = "ABC".padding(to: 5, with: "0", isTrailing: false)
// a: " ABC"
// b: "00ABC"
// c: "ABC "
// d: "ABC00"
// 2. n文字ごとに区切る
let e = "ABCDEFG".split(by: 2)
// e: ["AB", "CD", "EF", "G"]
// 3. 重複する要素ががあるかないか
let f = ["A", "B", "C"].hasDuplicated
let g = ["A", "A", "C"].hasDuplicated
// f: false
// g: true
// 4. 配列を区切って二次元配列にする
let h = ["A", "B", "C", "D", "E", "F", "G"].split(by: 2)
// [["A", "B"], ["C", "D"], ["E", "F"], ["G"]]
// 5. 要素数チェックをしながらオプショナル型で取り出す
let i = ["A", "B", "C"][at: 2]
let j = ["A", "B", "C"][at: 3]
// i: "C" (Optional)
// j: nil
さいごに
どれも調べたら出てきそうですが、一箇所にまとめておきたかったので。