Удаление элемента из 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
}
}