Custom Impementation of Higher Order function in Swift
Guys frequently asked question in interview to implement own higher order function. so here is the implementation.
Map:
func myMap<T>(_ transform : (Element) throws -> T ) rethrows -> [T] {
var results = [T]()
for val in self {
results.append(try transform(val))
}
return results
}
CompactMap:
func myCompactMap<T>(_ transform : (Element) throws -> T?) rethrows -> [T] {
var results = [T]()
for val in self {
if let value = try transform(val) {
results.append(value)
}
}
return results
}
Filter:
func myFilter(_ isInclude: (Element) throws -> Bool) rethrows -> [Element] {
var results = [Element]()
for val in self {
if try isInclude(val) {
results.append(val)
}
}
return results
}
Reduce:
func myReduce<T>(_ initialResult: T, _ nextPartialResult: (T, Element) -> T) -> T {
var result = initialResult
for val in self {
result = nextPartialResult(result, val)
}
return result
}