显示2D数组

时间:2014-01-27 04:09:48

标签: objective-c xcode command-line

我有一个二维数组

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

我试图在Xcode的命令行中显示它。我有:

NSLog(@"%d", arr);

但它不起作用。为什么以及我需要使用什么?

3 个答案:

答案 0 :(得分:1)

您可以像这样使用NSDictionary

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

然后,像这样打印

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

让我详细解释一下这里到底发生了什么...... 您创建的是具有键值对的NSDictionary,而不是创建二维数组。

您要为NSArray类型键设置NSNumber类型值。所以你这里有3把钥匙......“@ 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(@"}");

答案 1 :(得分: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); ,并在内部循环后将每个字符串添加到外部循环之后的日志中。

{{1}}

答案 2 :(得分:0)

您当前正在显示一个整数。您需要显示整个对象。