Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. extension Sequence {
  2. public func filterMap<T>(map: (Self.Iterator.Element) throws -> (Bool, T)) rethrows -> [T] {
  3. var array : [T] = []
  4. for element in self {
  5. do {
  6. let (result, value) = try map(element)
  7. if result {
  8. array.append(value)
  9. }
  10. }
  11. }
  12. return array
  13. }
  14.  
  15. public func filterMap<T>(includeElement: (Self.Iterator.Element) throws -> Bool, map: (Self.Iterator.Element) throws -> T) rethrows -> [T] {
  16. var array : [T] = []
  17. for element in self {
  18. do {
  19. if try includeElement(element) {
  20. array.append(try map(element))
  21. }
  22. }
  23. }
  24. return array
  25. }
  26. }
  27.  
  28.  
  29. print((0...10).filterMap { return ($0 % 2 == 0, $0 * 2) })
  30. // prints [0, 4, 8, 12, 16, 20]
  31.  
  32. print(
  33. (0...10).filterMap(
  34. includeElement: { return $0 % 2 == 0 },
  35. map: { return $0 * 4 }
  36. )
  37. )
  38. // prints [0, 8, 16, 24, 32, 40]
  39.  
  40.  
  41. print([nil, 1, 4, nil, 6].filterMap(includeElement: { $0 != nil }, map: { $0! + 1 }))
  42. // prints [2, 5, 7]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement