我有一个二维数组
NSInteger arr [3][3] = {{0, 0, 0},
{0, 0, 0},
{0, 0, 0}};
我试图在Xcode的命令行中显示它。我有:
NSLog(@"%d", arr);
但它不起作用。为什么以及我需要使用什么?
答案 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)
您当前正在显示一个整数。您需要显示整个对象。