Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了arrays – 序列数组中的奇数和偶数索引大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

for循环中的for不起作用,因为int类型不符合协议序列. 我有3个数组: 1个主数组,存储数组 1个奇数阵,开头为空 1个偶数组,开头为空 意思是主阵列的所有奇数索引将存储在奇数阵列中,而偶数阵列则相同. while i < masterA.count { evenA.append(masterA[i]) if i > 0{ oddA.appen
@H_197_10@
for循环中的for不起作用,因为int类型不符合协议序列.

我有3个数组:

1个主数组,存储数组

1个奇数阵,开头为空

1个偶数组,开头为空

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

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

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

这是另一种可能的@L_675_1@案
let evenA = Stride(from: 0,to: masterA.count,by: 2).map { masterA[$0] }
let oddA = Stride(from: 1,by: 2).map { masterA[$0] }

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

表现比较:

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

import Swift

let N = 10_000_000
let RUNS = 50

let masterA = (0..<N).map { $0 }

var times = (0.0,0.0,0.0)
for _ in 1...RUNS {

    // filter+map (dfri)
    do {
        let start = Date()
        let evenA = masterA.enumerated().filter { $0.0 % 2 == 0 }.map{ $0.1 }
        let oddA = masterA.enumerated().filter { $0.0 % 2 != 0 }.map{ $0.1 }
        let time = Date().timeIntervalSince(start)
        times.0 += time
    }

    // flatMap (dfri)
    do {
        let start = Date()
        let evenA = masterA.enumerated().flatMap { $0 % 2 == 0 ? $1 : nil }
        let oddA = masterA.enumerated().flatMap { $0 % 2 != 0 ? $1 : nil }
        let time = Date().timeIntervalSince(start)
        times.1 += time
    }

    // Stride+map (mE)
    do {
        let start = Date()
        let evenA = Stride(from: 0,by: 2).map { masterA[$0] }
        let oddA = Stride(from: 1,by: 2).map { masterA[$0] }
        let time = Date().timeIntervalSince(start)
        times.2 += time
    }

    // loop (Keiwan)
    do {
        let start = Date()
        var evenA = [Int]()
        var oddA = [Int]()

        for (index,element) in masterA.enumerated() {
            if index % 2 == 0 {
                evenA.append(element)
            } else {
                oddA.append(element)
            }
        }
        let time = Date().timeIntervalSince(start)
        times.3 += time
    }
}

print(N,RUNS)
print(times.0/Double(RUNS),times.1/Double(RUNS),times.2/Double(RUNS),times.3/Double(RUNS))

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

#elements   filter+map  flatMap   Stride+map  loop
10,000      0.0001      0.00008   0.00004     0.00004
100,000     0.0016      0.0008    0.0004      0.0004
1,000,000   0.0295      0.0136    0.0090      0.0091
10,000  0.3025      0.1332    0.0909      0.1250

大佬总结

以上是大佬教程为你收集整理的arrays – 序列数组中的奇数和偶数索引全部内容,希望文章能够帮你解决arrays – 序列数组中的奇数和偶数索引所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。