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> wrote: >> >> >> on Wed Jun 08 2016, Dave Abrahams <swift-evolution@swift.org> wrote: >> > >>> on Wed Jun 08 2016, gadiraju praneeth <swift-evolution@swift.org> 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 >> https://lists.swift.org/mailman/listinfo/swift-evolution -- Dave _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution