2014-01-27 148 views
1

我有一個2維陣列顯示2D陣列

NSInteger arr [3][3] = {{0, 0, 0}, 
         {0, 0, 0}, 
         {0, 0, 0}}; 

我試圖在Xcode的命令行來顯示它。我有:

NSLog(@"%d", arr); 

但它不起作用。爲什麼和我需要使用什麼?

+0

它很簡單,就像你在* C/C++ *中做的那樣。寫循環顯示它。 –

回答

1

您可以使用NSDictionary這樣的:

NSDictionary *dict= @{@0:@[@0,@0,@0], 
         @1:@[@0,@0,@0], 
          @2:@[@0,@0,@0]}; 

,然後打印它像這樣

NSLog(@"%d",[[dict objectForKey:@1][0] intValue];) 

讓我解釋一下你在細節究竟這裏發生的一切.. ,與其建立2維數組,您正在使用鍵值對創建NSDictionary。

在這裏,您正在爲NSNumber類型的鍵設置NSArray類型值。所以你在這裏有三把鑰匙..「@ 0,@ 1 & @ 2」。對於每個分配一個NSArray對象作爲值。每個是@[@0,@0,@0]

在打印值的時候,首先通過使用[dict objectForKey:@1]從它的關鍵字獲得確切的NSArray。然後獲得數組的第0個元素,您使用的是[dict objectForKey:@1][0]

由於NSArray的每個元素都是NSNumber,因此您只需打印對象&即可獲得intValue。

要打印完整的數組對象,使用此:

NSLog(@"%@",[dict description]); 

更新:

如果你堅持使用做到這一點NSInteger的:

NSInteger arr [3][3] = {{0, 3, 0}, 
     {0, 0, 0}, 
     {0, 0, 0}}; 
NSLog(@"{"); 
    for(int i = 0;i<3;i++) 
    { 
     NSLog(@"{"); 
     for(int j=0;j<3;j++) 
     { 
      NSLog(@"%d, ",arr[i][j]); 
     } 
     NSLog(@"},"); 
    } 
    NSLog(@"}"); 
+0

我需要使用NSInteger,而不是NSDictionary – jsollo2

+0

我遵循你在做什麼,但我需要創建一個二維數組,而不是一個NSDictionary。所以如果(@「%d」,...)打印一個字典,什麼代碼打印一個NSInteger數組[] []? – jsollo2

+0

檢查我的更新@ user1707540 –

0

您正在用一個整數顯示。您需要顯示整個對象。

1

NSLog不知道如何以您想要的方式顯示C數組。 您將需要兩個嵌套for循環來做到這一點。 外層循環迭代第一維索引。 內循環迭代第二維索引。 你可能想要在外環創建NSMutableString,並添加到它使用stringWithFormat:內循環的每次迭代,那麼你可以在內部循環後打印字符串NSLog(外循環)

你也可以在外循環外部創建一個主NSMutableString,並在內循環之後將外部循環之後的日誌添加到每個字符串中。

NSInteger idx1 = 3; 
NSInteger idx2 = 3; 
NSInteger arr [idx1][idx2] = {{0, 0, 0}, 
         {0, 0, 0}, 
         {0, 0, 0}}; 


NSMutableString *finalString = [NSMutableString new]; 

for (NSInteger i = 0; i < idx1; ++i) { 
    NSMutableString *temp = [NSMutableString new]; 
    for (NSInteger j = 0; j < idx2; ++j) { 
     [temp appendString:[NSString stringWithFormat:@"[%ld]", arr[i][j] ]]; 
    } 
    [temp appendString: @"\n"]; 
    [finalString appendString:temp]; 
} 

NSLog(@"%@", finalString);