Probably would have been better to go with a mutating filter and a non-mutating 
filtered, terms-of-art be damned. Remove seems like an subpar substitute for 
that.

> On Sep 26, 2017, at 12:55 AM, 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

Reply via email to