簡體   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