2014-10-10 43 views
3

在CI有以下多維數組:多維數組從C到斯威夫特

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 
    } 

我知道SWIFT我可以這樣做:

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

但我不知道這是否產生相同的結果訪問元素。

回答

3

您可以創建一個非常相似的方式多dimentsional陣列到你的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.

+0

感謝細節。我只是創建另一個關於這個問題:http://stackoverflow.com/questions/26291862/swift-iterating-over-an-array-and-updating-value-error-lvalue-t5-is-not-i – user1107173 2014-10-10 04:17:24

+0

非常很好的分析。 – 2014-10-10 04:38:58

1

我從來沒有在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 
+0

從技術上講這是[元組](數組https://developer.apple .com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#// apple_ref/doc/uid/TP40014097-CH5-XID_481),而不是多維數組。它可能工作得很好,這取決於它需要如何使用。 – 2014-10-10 03:41:46