One of my coworkers asked how to filter a list, but return the “pass” and “fail” items in separate lists. For example, filter
takes some data and a condition, and returns a list of the items that pass the condition, but what if we returned two lists? One of my other coworkers came up with a neat solution using reduce
, and I wrote something using generics. Here’s the operation I’m calling “fork”, implemented in Swift3.
import Foundation func fork<T>(_ data: [T], completion: (T)->Bool) -> ([T],[T]) { var pass = [T]() var fail = [T]() for item in data { completion(item) ? pass.append(item) : fail.append(item) } return (pass,fail) } var (pass, fail) = fork([0,1,2,3,4]) { $0 % 2 == 0 }