Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. /**
  2. Measuring the performance of reduce compared to joined and map+joined.
  3. Spoiler: map+joined way more faster!!!
  4. Try this code in a .playground file if you want.
  5. */
  6.  
  7. func measure(closure: (()->Void)) {
  8. let start = Date()
  9. closure()
  10. let interval = Date().timeIntervalSince(start)
  11. print(interval)
  12. }
  13.  
  14. // joined vs. reduce
  15.  
  16. let nested: [[UInt8]] = Array(repeating: Array(repeating: 200, count: 100), count: 100)
  17.  
  18. // 0.00224500894546509 sec
  19. measure {
  20. _ = nested.joined()
  21. }
  22.  
  23. // 1.02885299921036 sec
  24. measure {
  25. _ = nested.reduce([]) { $0 + $1 }
  26. }
  27.  
  28. // map + joined vs. reduce
  29.  
  30. let values: [UInt8] = Array(repeating: 200, count: 10000)
  31.  
  32. // 0.34653902053833 sec
  33. measure {
  34. _ = values.map{"\($0)"}.joined()
  35. }
  36.  
  37. // 16.6465470194817 sec
  38. measure {
  39. _ = values.reduce("") {
  40. return "\($0)\($1)"
  41. }
  42. }
  43.  
  44. // map + joined with separator vs. reduce
  45.  
  46. // 0.499653995037079 sec
  47. measure {
  48. _ = values.map{"\($0)"}.joined(separator: ".")
  49. }
  50.  
  51. // 22.2956600189209 sec
  52. measure {
  53. _ = values.reduce("") {
  54. return $0 + ($0.isEmpty ? "" : ".") + "\($1)"
  55. }
  56. }
  57.  
  58. // Results: map+joined burnt reduce
  59. // 0.00224500894546509 vs 1.02885299921036
  60. // 0.34653902053833 vs 16.6465470194817
  61. // 0.499653995037079 vs 22.2956600189209
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement