> 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—wouldn't it be better to wrap a 
collection around two lazy filter sequences?

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

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to