從陣列中刪除元素而不知道其索引

通常,如果我們想從陣列中刪除一個元素,我們需要知道它的索引,以便我們可以使用 remove(at:) 函式輕鬆刪除它。

但是如果我們不知道索引但我們知道要刪除的元素的價值呢?

所以這裡是對陣列的簡單擴充套件,它允許我們在不知道索引的情況下輕鬆地從陣列中刪除元素:

Swift3

extension Array where Element: Equatable {

    mutating func remove(_ element: Element) {
        _ = index(of: element).flatMap {
            self.remove(at: $0)
        }
    }
}

例如

    var array = ["abc", "lmn", "pqr", "stu", "xyz"]
    array.remove("lmn")
    print("\(array)")    //["abc", "pqr", "stu", "xyz"]
    
    array.remove("nonexistent")
    print("\(array)")    //["abc", "pqr", "stu", "xyz"]
    //if provided element value is not present, then it will do nothing!

另外,如果我們錯誤地做了類似的事情:array.remove(25) 即我們提供了不同資料型別的值,編譯器會丟擲錯誤
提示 - cannot convert value to expected argument type