[英]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.