This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Sequence { | |
func myCompactMap<T>(_ operation: (Element) -> T?) -> [T] { | |
var output: [T] = [] | |
for item in self { | |
if let value = operation(item) { | |
output.append(value) | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Sequence { | |
/// Reduce: applies a given operation on elements of a given sequence and returns a single value (of same type as of the elements in given sequence) at the end | |
/// - Parameters: | |
/// - initialValue: Initial value for the operation to start | |
/// - operation: function that'll be applied on elements of the given sequence | |
/// - Returns: final value after applying operation on the elements of given sequence | |
func myReduce(_ initialValue: Element, | |
_ operation: (_ value1: Element, _ value2: Element) -> Element) -> Element { | |
var output: Element = initialValue |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Sequence { | |
func myMap<T>(_ operation: (Element) -> T) -> [T] { | |
var arrayAfterOperatedValues: [T] = [] | |
for item in self { | |
/// Apply operation on each element (as map(_:) does) | |
let operatedValue = operation(item) | |
arrayAfterOperatedValues.append(operatedValue) | |
} | |
NewerOlder