Удаление элемента из Set по id за константное время O(1)

Есть структура Product со свойством id типа String и есть метод deleteProduct

deleteProduct(id: String) -> Bool

Подскажите пожалуйста, как можно удалить элемент Set по этому id за константное время O(1) и вернуть соответсвующее значение Bool, где если элемент по этому id существует то вернется true, а если нет то false? Пробовал вот так, но кажется это тоже O(n)

var storage = Set<Product>()

func deleteProduct(id: String) -> Bool {
            
    if let result = storage.first(where: { $0.id == id }) {
        storage.remove(result)
        return true
    } else {
        return false
    }
}

Ответы (1 шт):

Автор решения: Oleg Soloviev

Set содержит уникальный набор данных. Соответственно, вы можете просто создать нужный объект и попробовать его удалить из коллекции. Если он в ней есть, то он удалится за одну операцию:

func deleteProduct(id: String) -> Bool {                
    let product = Product(id: id)
    
    if let _ = storage.remove(product) {
        return true
    } else {
        return false
    }
}
→ Ссылка