Sent from my iPhone

> On Sep 25, 2017, at 22:16, Jonathan Hull via swift-evolution 
> <[email protected]> wrote:
> 
> 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). 
>  
> 

There’s partition(by:), which gives you an index that you can split with. 

> 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]> 
>> 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]> a écrit :
>>>> 
>>>> On Mon, Sep 25, 2017 at 4:55 PM, Xiaodi Wu <[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]> 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]> 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 
>>>>>>> 
>>>>>>> Any thoughts/suggestions on this are appreciated.
>>>>>>> 
>>>>>>> Thanks!
>>>>>>> 
>>>>>>> Alwyn
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> 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
>>>> 
>>> 
>> _______________________________________________
>> 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
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to