I added an extension to do this, something like this: extension Array {
func filterSplit(includeElement: (Element) -> Bool) -> ([Element], [Element]) { var elementsSatisfyingCondition = [Element]() var elementsNotSatisfyingCondition = [Element]() self.forEach { element in if includeElement(element) { elementsSatisfyingCondition.append(element) } else { elementsNotSatisfyingCondition.append(element) } } return (elementsSatisfyingCondition, elementsNotSatisfyingCondition) } } that way you can right away do: values.filterSplit { <yourPredicateBlock> } On Wed, 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) > > Hmm, come to think of it, Nate, maybe there should also be a more > convenient way to get the two partitions from the result. > > -- > Dave > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution