繁体   English   中英

多维数组从C到Swift

[英]Multidimensional arrays From C to Swift

在CI中有以下多维数组:

unsigned wins[8][3] = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

要访问元素,我使用以下代码:

int i;
for(i = 0; i < 8; ++i)     {
    unsigned *positions;
    positions = wins[i];

    unsigned pos0 = positions[0];
    unsigned pos1 = positions[1];
    unsigned pos2 = positions[2];

    if(arrayPassedIn[pos0] != 0 && arrayPassedIn[pos0] == arrayPassedIn[pos1] && arrayPassedIn[pos0] == arrayPassedIn[pos2])
    {
         // Do Something Here
    }

我很快就知道我可以这样做:

var array = Array<Array<Int>>()

但我不确定这是否会产生相同的结果来访问元素。

您可以使用与C代码非常相似的方式创建多维数组:

var wins = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]

使用它的Swift代码与C代码的使用方式非常相似; 主要的区别是使用for-in循环而不是标准for循环(虽然你可以做到这一点)。

for positions in wins {
    var pos0 = positions[0]
    var pos1 = positions[1]
    var pos2 = positions[2]

    if(arrayPassedIn[pos0] != 0 && arrayPassedIn[pos0] == arrayPassedIn[pos1] && arrayPassedIn[pos0] == arrayPassedIn[pos2])
    {
        // Do Something Here
    }
}

请注意,即使有相似之处,斯威夫特阵列不像阵列在C.举例来说,当你遍历wins ,你实际上创建的副本positions阵列(实际内存拷贝只发生,如果你写入数组,因此没有真正的性能损失)。 然后,如果您将positions[0]设置为不同的值,那么该值将不会wins更新,就像它是C.

我从未在obj-C工作过,但我认为相应的是:

let array: [(Int, Int, Int)] = [(0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6)]
println(array[2].0) //6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM