As he says, it is an in-place equivalent of filter, so the use-cases would be 
similar.  I could see this being extremely useful.  Off the top of my head:

        views.remove(where: {$0.isHidden}) //Remove all views which are hidden 
from the list.

Another thing which seems to be missing (although it could be there and I don’t 
know the name) is the ability to split a list into two using a filter (one with 
the filtered items and one with the remainder).  I am surprised every time I 
reach for it and it isn’t there (the last time being yesterday).  

Thanks,
Jon


> On Sep 25, 2017, at 9:55 PM, Xiaodi Wu via swift-evolution 
> <[email protected]> wrote:
> 
> What is the use case?
> On Mon, Sep 25, 2017 at 23:27 Félix Cloutier <[email protected] 
> <mailto:[email protected]>> wrote:
> Actually, IMO, it's an oversight that there's no remove(where:), or another 
> in-place equivalent to `filter`. I'm in favor of it.
> 
> Félix
> 
> 
>> Le 25 sept. 2017 à 15:17, Xiaodi Wu <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> On Mon, Sep 25, 2017 at 4:55 PM, Xiaodi Wu <[email protected] 
>> <mailto:[email protected]>> wrote:
>> Brent has a great proposal in the pipeline regularizing the names of some of 
>> these functions and filling in some of the more glaring gaps.
>> 
>> With regard to the specific items proposed here, Felix shows that ‘filter’ 
>> provides an idiomatic one-line way of doing some of what is proposed; 
>> currently remove(index(of:)) and operating on sliced would accomplish the 
>> rest. Therefore, I do not think these proposed additions meet the very high 
>> bar for expansion of the standard library API.
>> 
>> I should add, however, it is wonderful (IMO) that more people are thinking 
>> about these APIs; welcome and thank you for restarting this very important 
>> conversation. It would be nice to get some more eyeballs on the previously 
>> discussed set of rationalizations to the Collection APIs so that we can make 
>> their use a little more ergonomic--with any luck, some better names for 
>> existing extension methods and filling in a very few gaps judiciously would 
>> allow us to make the existing facilities sufficiently more discoverable that 
>> it will be easier to accomplish what you seek without adding more extensions.
>> 
>> 
>> On Mon, Sep 25, 2017 at 11:14 Félix Cloutier via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> Another alternative is to use `array = array.filter { $0 != someElement }`.
>> 
>> I thought that there would be a `remove(where:)` method, but there isn't.
>> 
>> Félix
>> 
>>> Le 25 sept. 2017 à 02:12, Alwyn Concessao via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> a écrit :
>>> 
>>> 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 
>>> <https://github.com/apple/swift/pull/12058> 
>>> 
>>> Any thoughts/suggestions on this are appreciated.
>>> 
>>> Thanks!
>>> 
>>> Alwyn
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to