頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Swiftでarray.remove(value)と記述するextension

SwiftのArrayに入っている値を削除したい。

使えそうなメソッドは↓この辺りか。
mutating func remove(at i: Self.Index) -> Self.Element

これだと何番目のindexか自分で調べないといけない。
それは面倒なので、削除する値を直接指定して
array.remove(value)
なんて感じで記述したい。

SwiftのExtensionで実装した。
extension Array where Element: Hashable  {

mutating func remove(_ removingValue: Element) {

var removingIndex: Int? = nil

for (index, value) in self.enumerated() {
if value == removingValue {
removingIndex = index
break
}
}
if removingIndex != nil {
self.remove(at: removingIndex!)
}
}
}

funcの前にmutatingとあって返り値がない。なので
array = array.remove(value)
などと記述せずに
array.remove(value)
でOK。
ElementにHashableとすることでこれを満たす型に対して処理してくれる。

使う時はこんな感じで。
    // 1)NSColorの場合
var colors: [NSColor] = [.red, .green, .blue,]

print("---before---")
for color in colors {
print(String(describing: color))
}

colors.remove(.green)

print("---after---")
for color in colors {
print(String(describing: color))
}


// 2)整数の場合
var ints: [Int] = [2, 3, 5, 7, 11]
ints.remove(7)
print(ints)

実行した結果のスクショ

↑実行した結果。

なお、コードをたどればわかるが配列内に削除したい要素が複数あっても1つしか削除しない。自分の用途ではこれでOKだったので。



macOS 10.15.3 Catalina
Xcode 11.3.1
Swift 5.1.3
スポンサーサイト




<< ポケモンGOで2つのタイプを持つポケモンが存在しないパターンはあるのか?  TopPage  ユニットテストを後から追加すると動かない >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1338-62adc6c8




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.