[swift-evolution] Proposal: Filter split extension on Sequence to return tuple of sequences that meet criteria and that do not

Dave Abrahams dabrahams at apple.com
Wed Jun 8 15:40:58 CDT 2016


on Wed Jun 08 2016, Dave Abrahams <swift-evolution at swift.org> wrote:

> on Wed Jun 08 2016, gadiraju praneeth <swift-evolution at 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



More information about the swift-evolution mailing list