Hello,
After going through the Swift standard library functions provided for removing
elements from a collection, one common pattern can be observed in all those
functions and that is the functions provide to remove elements from the
collection by passing the position or index of the element or passing a range
of indices or positions to remove the elements.The standard library does not
provide options to remove an element from a collection by passing the actual
element to be removed directly to the remove method.I've encountered this
situation many times when programming in Swift wherein I want an element or a
set of elements to be removed directly without always accessing it's index in
the collection but I have always ended up having to first access the index of
the element or elements which I want to remove and then pass that index to the
remove method.
The idea is to have an extension of the RangeReplaceableCollection protocol to
include a method to remove elements from a collection by passing directly the
element to be removed to the remove method and also include methods to remove
multiple elements from the collection by passing in a sequence of the elements
to be removed to the remove method and to remove an element in a particular
subrange of the collection.
The prototype of the methods will be as follows -
extension RangeReplaceableCollection where Element:Equatable{
mutating func removeElement(_ elementToBeRemoved:Element){
//check if elementToBeRemoved exists ;if yes, remove all occurrences of
elementsToBeRemoved from the collection.
}
mutating func removeElementInSubrange(_ elementToBeRemoved:Element,in
range:Range<Index>){
//check if elementoBeRemoved exists; if yes, check if the index of
elementToBeRemoved is part of the subrange, if yes then remove else don't
remove.
}
mutating func removeContentsOf<C:Collection>(_ elementsToBeRemoved:C){
//check if each element in the elementsToBeRemoved sequence exists in the
collection, if the element exists, remove it.
}
I've implemented the above in the pull request
https://github.com/apple/swift/pull/12058
Any thoughts/suggestions on this are appreciated.
Thanks!
Alwyn
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution