arrays – 序列数组中的奇数和偶数索引

前端之家收集整理的这篇文章主要介绍了arrays – 序列数组中的奇数和偶数索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
for循环中的for不起作用,因为int类型不符合协议序列.

我有3个数组:

1个主数组,存储数组

1个奇数阵,开头为空

1个偶数组,开头为空

意思是主阵列的所有奇数索引将存储在奇数阵列中,而偶数阵列则相同.

  1. while i < masterA.count {
  2. evenA.append(masterA[i])
  3. if i > 0{
  4. oddA.append(masterA[i - 1])
  5. }
  6. i += 2
  7. }

然而,这不够好.谁有更好的主意?

这是另一种可能的解决方
  1. let evenA = stride(from: 0,to: masterA.count,by: 2).map { masterA[$0] }
  2. let oddA = stride(from: 1,by: 2).map { masterA[$0] }

元素直接从源阵列中的偶数/奇数位置“拾取”.

表现比较:

我的简单,不是非常复杂的特殊基准测试代码

  1. import Swift
  2.  
  3. let N = 10_000_000
  4. let RUNS = 50
  5.  
  6. let masterA = (0..<N).map { $0 }
  7.  
  8. var times = (0.0,0.0,0.0)
  9. for _ in 1...RUNS {
  10.  
  11. // filter+map (dfri)
  12. do {
  13. let start = Date()
  14. let evenA = masterA.enumerated().filter { $0.0 % 2 == 0 }.map{ $0.1 }
  15. let oddA = masterA.enumerated().filter { $0.0 % 2 != 0 }.map{ $0.1 }
  16. let time = Date().timeIntervalSince(start)
  17. times.0 += time
  18. }
  19.  
  20. // flatMap (dfri)
  21. do {
  22. let start = Date()
  23. let evenA = masterA.enumerated().flatMap { $0 % 2 == 0 ? $1 : nil }
  24. let oddA = masterA.enumerated().flatMap { $0 % 2 != 0 ? $1 : nil }
  25. let time = Date().timeIntervalSince(start)
  26. times.1 += time
  27. }
  28.  
  29. // stride+map (me)
  30. do {
  31. let start = Date()
  32. let evenA = stride(from: 0,by: 2).map { masterA[$0] }
  33. let oddA = stride(from: 1,by: 2).map { masterA[$0] }
  34. let time = Date().timeIntervalSince(start)
  35. times.2 += time
  36. }
  37.  
  38. // loop (Keiwan)
  39. do {
  40. let start = Date()
  41. var evenA = [Int]()
  42. var oddA = [Int]()
  43.  
  44. for (index,element) in masterA.enumerated() {
  45. if index % 2 == 0 {
  46. evenA.append(element)
  47. } else {
  48. oddA.append(element)
  49. }
  50. }
  51. let time = Date().timeIntervalSince(start)
  52. times.3 += time
  53. }
  54. }
  55.  
  56. print(N,RUNS)
  57. print(times.0/Double(RUNS),times.1/Double(RUNS),times.2/Double(RUNS),times.3/Double(RUNS))

结果:(在MacBook上,在发布模式下运行)

  1. #elements filter+map flatMap stride+map loop
  2. 10,000 0.0001 0.00008 0.00004 0.00004
  3. 100,000 0.0016 0.0008 0.0004 0.0004
  4. 1,000,000 0.0295 0.0136 0.0090 0.0091
  5. 10,000 0.3025 0.1332 0.0909 0.1250

猜你在找的Swift相关文章