arr.index(of:)

available only when Element conforms to Identifiable.

// 2022.02.15

// 🌀Array + .index(of:)
extension Array where Element: Identifiable {
    /// find index of element in array.
    /// (available when `Element` comforms to `Identifiable`)
    /// ```
    /// array.index(of: element)    // could be nil
    /// ```
    public func index(of element: Element) -> Int? {
        for i in 0..<count {
            // ⭐ 注意:這裡有用到 Int-based index
            //    所以要用 Array 而不是 Collection
            //    除非要改為:
            //       extension Collection 
            //         where Self.Index == Int, Element: Identifiable
            if self[i].id == element.id { return i }
        }
        return nil
    }
}

  • 雖然上面的 extension 也可以用下面的語法來代替:

array.firstIndex { $0.id == element.id }
  • 但如果在找一個「一定可找到又唯一」的東西時,用 extension 的語法會較簡潔:

let i = array.index(of: element)!

注意:我們在 index(of:) 後面加一個「」,表示我們確定這是一個可以絕對找到的東西,同時又沒有忽略這個函數回傳的其實是一個 Optinal<Int>

Last updated