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