在序列数组

时间:2016-10-11 18:11:16

标签: arrays swift

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
    }

然而,这不够好。任何人都有更好的主意吗?

4 个答案:

答案 0 :(得分:17)

这是另一种可能的解决方案:

DropDownList

元素被选中&#34;直接来自源数组中的偶数/奇数位置。

效果比较:

我的简单,非常复杂的临时基准测试代码:

onChange

结果:(在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,000  0.3025      0.1332    0.0909      0.1250

答案 1 :(得分:6)

您可以在循环时使用enumerated()同时获取索引和值:

for (index, element) in masterA.enumerated() {
    if index % 2 == 0 {
        evenA.append(element)
    } else {
        oddA.append(element)
    }
}

这会将element的每个masterAoddA中的奇数索引以及evenA中具有偶数索引的每个元素存储起来。

答案 2 :(得分:5)

可能我误解了你的意图,但似乎你希望Lo2.DataBodyRange.Cells(Tablesize2, 1) = Lo.Name Lo2.DataBodyRange.Cells(Tablesize2, 2) = Sht1.Range("A" & CurrentRow + 1).Value Lo2.DataBodyRange.Cells(Tablesize2, 3) = Sht1.Range("B" & CurrentRow + 1).Value 的{​​em>元素具有奇数索引应该存储在masterA中,反之,具有偶数索引的oddA元素应存储在masterA

您可以通过过滤evenA w.r.t来实现此目的。 masterA的索引,可从masterA获得。

masterA.enumerated()

正如@Hamish在下面的评论中指出的那样,我们可以使用let masterA = [4, 5, 2, 1, 7, 8, 1] let evenA = masterA.enumerated().filter { $0.0 % 2 == 0 }.map{ $0.1 } let oddA = masterA.enumerated().filter { $0.0 % 2 != 0 }.map{ $0.1 } print(evenA) // [4, 2, 7, 1] print(oddA) // [5, 1, 8] (Swift 3:compactMap)作为链式flatMapfilter的替代方案。

map

后一种let evenA = masterA.enumerated().compactMap { $0 % 2 == 0 ? $1 : nil } let oddA = masterA.enumerated().compactMap { $0 % 2 != 0 ? $1 : nil } 解决方案更简洁,而compactMap ... filter解决方案可能显示意图稍微清晰一些。在这个特殊的简短与语义竞争中,我个人更喜欢map解决方案。

答案 3 :(得分:1)

另一种解决方案

  

Swift 3.0代码

let array = [1,2,3,4,5,6,7,8]
var oddArray = [Int]()
var evenArray = [Int]()

for (index,value) in array.enumerated() {
    if index % 2 == 0 {
        // It is odd because index starts from 0 in array and I am assuming the 0 index as the odd one.
        oddArray.append(value)
    } else {
        evenArray.append(value)
    }
}

奇数阵= [1,3,5,7]
偶数数组= [2,4,6,8]