Objective c 在objective C中打印数组
很抱歉问这么简单的问题,但我是自学成才的,我知道我的教育存在差距 要在objective C中打印数组,我相信:Objective c 在objective C中打印数组,objective-c,Objective C,很抱歉问这么简单的问题,但我是自学成才的,我知道我的教育存在差距 要在objective C中打印数组,我相信: NSLog(@"My array: %@", myArray); 如何打印数组的数组 谢谢尝试从NSArray的-description方法记录返回值 NSLog(@"My array: %@", [myArray description]); 或者使用递归描述:) 你想要这个: for(NSArray *subArray in myArray) { NSLog(@"Ar
NSLog(@"My array: %@", myArray);
如何打印数组的数组
谢谢尝试从
NSArray
的-description
方法记录返回值
NSLog(@"My array: %@", [myArray description]);
或者使用
递归描述
:)
你想要这个:
for(NSArray *subArray in myArray) {
NSLog(@"Array in myArray: %@",subArray);
}
这将适用于嵌套了一层深度的数组。此外,用于打印所有元素
int i = 0;
int j = 0;
for(NSArray *subArray in myArray) {
NSLog(@"[%d] %@",i, subArray);
j =0;
for(NSObject *element in subArray) {
NSLog(@"[%d:%d] %@", i,j,element);
++j;
}
++i;
}
您不需要做任何不同的事情来记录一组数组;与您编写的代码完全相同的代码已经显示了子数组的内容 即以下程序:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *array = [NSMutableArray array];
for (int i=0; i<5; ++i) {
NSMutableArray *sub = [NSMutableArray array];
for (int j=0; j<=i; ++j) {
[sub addObject:[NSString stringWithFormat:@"%d", j]];
}
[array addObject:sub];
}
NSLog(@"Array: %@", array);
[pool drain];
return 0;
}
显然,它已经很好地记录了子阵列。如果您想以不同的方式控制格式,您必须手动迭代它们,但是默认情况下,NSArray的
-description
比该数组中每个对象的-description
稍多,其中包括所有子数组。因此我对递归描述感到尴尬,所以我在NSArray上写了自己的分类。注意,这段代码将打印出任意深度的数组的描述。描述本身可能比逗号和换行符使用更多的格式。给你:
@interface NSArray (RecursiveDescription)
- (NSString *)recursiveDescription;
@end
@implementation NSArray (RecursiveDescription)
- (NSString *)recursiveDescription {
NSMutableString *description = [[NSMutableString alloc] initWithString:@"Array (\n"];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for (NSObject *child in self) {
if ([child respondsToSelector:@selector(recursiveDescription)]) {
[description appendFormat:@"%@,\n", [child recursiveDescription]];
}
else {
[description appendFormat:@"%@,\n", [child description]];
}
}
[pool drain];
[description appendString:@"\n)"];
return [description autorelease];
}
@end
虽然我很喜欢在Objective-C中注销一个对象是多么容易,但我不喜欢将2D数组视为一个很长的列表。我在NSArray上创建了一个类别,用于打印2D数组。它不是完美的,可以改进,但它对我很有效 标题:
@interface NSArray (Logging)
- (void)log2DArray;
@end
实施:
#import "NSArray+Logging.h"
@implementation NSArray (Logging)
- (void)log2DArray {
NSMutableString *formattedString = [[NSMutableString alloc] init];
NSInteger longestSubarrayLength = 0;
for (NSArray *subarray in self) {
if (subarray.count > longestSubarrayLength) {
longestSubarrayLength = subarray.count;
}
}
for (int i = 0; i < longestSubarrayLength; i++) {
[formattedString appendFormat:@"\n"];
for (int j = 0; j < self.count; j++) {
NSArray *tempArray = [self objectAtIndex:j];
if (tempArray.count <= longestSubarrayLength) {
[formattedString appendFormat:@"%@\t", [tempArray objectAtIndex:i]];
} else {
[formattedString appendFormat:@"\t"];
}
}
}
NSLog(@"%@", formattedString);
}
@end
那是一样的。
%@
格式说明符使用description
方法的结果(或CFCopyDescription()
用于CoreFoundation对象)。该方法记录在哪里?它不是NSArray
的记录方法,因为它不起作用。抱歉,据我和谷歌所知,这只是一个完全错误的答案。我不得不投反对票。如果你能解释一下的话,我会改变的。我的错。这是UIView上未记录的方法,用于转储UIView及其子级的描述;我(错误地)假设该方法适用于所有cocoa touch对象,但实际上它只是UIView。很抱歉添加一个不同的答案,并将此保留在此处作为警告,说明此未记录的方法仅适用于UIView。您是指NSArray
的NSArray
?或者你的意思是像constcharstuff[3][2]
?因为这两个是完全不同的东西。我指的是一堆堆堆堆。这是迄今为止最好的答案,因为它是最简单的。如果数组中有自定义对象,则始终可以重写NSObject
的-description
方法,使其更适合该类。无需循环。如何直接访问数组项?例如:char a[0]=“x”;库特
@interface NSArray (Logging)
- (void)log2DArray;
@end
#import "NSArray+Logging.h"
@implementation NSArray (Logging)
- (void)log2DArray {
NSMutableString *formattedString = [[NSMutableString alloc] init];
NSInteger longestSubarrayLength = 0;
for (NSArray *subarray in self) {
if (subarray.count > longestSubarrayLength) {
longestSubarrayLength = subarray.count;
}
}
for (int i = 0; i < longestSubarrayLength; i++) {
[formattedString appendFormat:@"\n"];
for (int j = 0; j < self.count; j++) {
NSArray *tempArray = [self objectAtIndex:j];
if (tempArray.count <= longestSubarrayLength) {
[formattedString appendFormat:@"%@\t", [tempArray objectAtIndex:i]];
} else {
[formattedString appendFormat:@"\t"];
}
}
}
NSLog(@"%@", formattedString);
}
@end
[myArray log2DArray];