I implemented something similar with two filters initially, but because of 2N vs N I changed it
On Wednesday, June 8, 2016, Dave Abrahams via swift-evolution < swift-evolution@swift.org> wrote: > > on Wed Jun 08 2016, Nate Cook <natecook-AT-gmail.com> wrote: > > >> On Jun 8, 2016, at 3:40 PM, Dave Abrahams via swift-evolution < > swift-evolution@swift.org <javascript:;>> wrote: > >> > >> > >> on Wed Jun 08 2016, Dave Abrahams <swift-evolution@swift.org > <javascript:;>> wrote: > >> > > > >>> on Wed Jun 08 2016, gadiraju praneeth <swift-evolution@swift.org > <javascript:;>> wrote: > >>> > >>>> Many times, I came across a scenario where I had to filter an array > with a > >>>> condition and filter the same array with opposite of that condition. > For > >>>> example: > >>>> > >>>> let values = [2, 4, 3, 5, 6, 9] > >>>> > >>>> let divisibleByTwo = values.filter { $0 % 2 == 0 } > >>>> let notDivisibleByTwo = values.filter { $0 % 2 != 0 } > >>>> > >>>> Is there a way currently where we can filter the array into two arrays > >>>> based on a condition? > >>> > >>> Well, you need a stable partition for this if you care about ordering > >>> (see > >>> > https://github.com/apple/swift/blob/master/test/Prototypes/Algorithms.swift#L299 > ) > >>> but then you can do > >>> > >>> var parts = values > >>> let mid = values.stablePartition { $0 % 2 == 0 } > >>> let divisibleByTwo = parts.prefix(upTo: mid) > >>> let notDivisibleByTwo = parts.suffix(from: mid) > >>> > >>> Nate Cook has an enhancement to the result of stablyPartitioned in that > >>> prototype that would let you write: > >>> > >>> let parts = values.stablyPartitioned { $0 % 2 == 0 } > >>> let divisibleByTwo = parts.prefix(upTo: parts.partitionPoint) > >>> let notDivisibleByTwo = parts.suffix(from: parts.partitionPoint) > > > > Mine was for the result of the 'rotated' methods, but should work for > > the partitioning ones, too. It's not as clear to me what the benefit > > of the "lazy" partitioning in that Algorithm.swift is > > Just to pass “laziness” on from the result, so further computations can > also be lazy. > > > —wouldn't it be better to wrap a collection around two lazy filter > > sequences? > > Perhaps something like a > LazyFlatMap<CollectionOfTwo<LazyFilterCollection>> would be better, but > I have the concern that this would evaluate the predicate 2N times for > each traversal. > > > Here is a quick proof of concept of 'divided' and 'partitioned' > > methods: > > http://swiftlang.ng.bluemix.net/#/repl/57588cbda79b317716f02e04 > > > >> Hmm, come to think of it, Nate, maybe there should also be a more > >> convenient way to get the two partitions from the result. > > > > Definitely! > > > > Nate > > > >> -- > >> Dave > >> > >> _______________________________________________ > >> swift-evolution mailing list > >> swift-evolution@swift.org <javascript:;> > >> https://lists.swift.org/mailman/listinfo/swift-evolution > > -- > Dave > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org <javascript:;> > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution