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) > If not how about something like a filterSplit function where we get a tuple > of values: > > values.filterSplit { $0 % 2 == 0 } = ([2,4,6], [3,5,9]) > > I have implemented this in our project and wanted to get your thoughts on it > _______________________________________________ > 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