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
