2010-07-16 76 views

回答

5

這當然是可能的,但我認爲值得注意的是NSArrays只能容納對象,而不是原始類型。

解決此問題的方法是使用原始包裝類型NSNumber

NSMutableArray *outer = [[NSMutableArray alloc] init]; 

NSMutableArray *inner = [[NSMutableArray alloc] init]; 
[inner addObject:[NSNumber numberWithInt:someInt]]; 
[outer addObject:inner]; 
[inner release]; 

//do something with outer here... 
//clean up 
[outer release]; 
+0

謝謝您的答覆。是否有可能創建一個動態數組而不是在開始時設置長度? – Questions 2010-07-16 01:42:22

+1

@MarkSiu,是的。如果你想,我可以給你一個這樣的例子。 – 2010-07-16 01:46:13

+0

謝謝你的回覆。你介意給我舉個例子嗎?非常感謝你。 – Questions 2010-07-16 01:52:33

-1

編輯使我的答案更適用於這個問題。最初我沒有注意到你正在尋找一個二維數組。如果您知道多少您需要預先多少,您可以交錯數據並邁進一步。我知道,可能有其他(更客觀的標準)方法,讓數組在數組內部,但對我來說會變得混亂。數組內部的數組不是2維數組。這只是其中一個對象的第二個維度。你必須爲每個對象添加一個數組,這不是我認爲的二維數組。對或錯我通常以對我有意義的方式做事。

因此,可以說,你需要一個6x6的陣列:

int arrayStride=6; 
int arrayDepth=6; 
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:arrayStride*arrayDepth]; 

我更喜歡用對象填充它初始化數組;

for(int i=0; i<arrayStride*arrayDepth; i++) [newArray addObject @"whatever"]; 

然後後,您可以通過firstDim訪問的對象+ secondDim * 6

int firstDim = 4; 
int secondDim = 2; 
NSString *nextString = [newArray objectAtIndex:firstDim+secondDim*6]; 
+0

不回答問題(OP詢問有關二維數組),並且啓動不正確(索引從0開始,因此最後一個對象的索引是i-1,而不是i)。 – 2010-07-16 02:21:16

+0

我沒有注意到2D的東西...是的,我的我是不正確的最後一個對象。感謝您指出。我改變了我的答案,我會做一個2D數組。 – badweasel 2010-07-16 04:24:12

1

與NSNumbers作爲鍵和數組作爲對象的嘗試的NSMutableDictionary。一個維度將成爲關鍵,另一個維度將成爲對象。

要創建特定的 「二維數組」

NSMutableDictionary *twoDArray = [NSMutableDictionary dictionary]; 
for (int i = 0; i < 10; i++){ 
    [twoDArray setObject:arrayOfStrings forKey:[NSNumber numberWithInt:i]]; 
} 

提取數據

NSString *string = [[twoDArray objectForKey:[NSNumber numberWithInt:3]] objectAtIndex:5]; 
//will pull string from row 3 column 5 -> as an example