我想在我的应用程序中使用可变大小的多维数组来保存数据。我想要使用的数据结构如下所示,每行中的第一个元素后面跟着相应的多个值。objective-c多维数组
array = { {a, a_val1, a_val2, a_val3}.
{b, b_val1},
{c, c_val1, c_val2, c_val3, c_val4, c_val5}
}
任何想法如何在objective-c中实现?
我想在我的应用程序中使用可变大小的多维数组来保存数据。我想要使用的数据结构如下所示,每行中的第一个元素后面跟着相应的多个值。objective-c多维数组
array = { {a, a_val1, a_val2, a_val3}.
{b, b_val1},
{c, c_val1, c_val2, c_val3, c_val4, c_val5}
}
任何想法如何在objective-c中实现?
的Objective-C没有一个真正的2维数组类型,但是你可以用 以下代码实现它..
在你的头文件--- yourheader.h
#import <Foundation/Foundation.h>
@interface yourheader : NSObject{
NSMutableDictionary* DictionaryArrayType;
NSMutableArray* MultiArrayType;
NSArray* CaptionTitle;
NSArray* ObjectValue;
}
@property (strong, nonatomic) NSMutableDictionary* DictionaryArrayType;
@property (strong, nonatomic) NSArray* CaptionTitle;
@property (strong, nonatomic) NSArray* ObjectValue;
@property (strong, nonatomic) NSMutableArray* MultiArrayType;
-(id) AddArrayObjects:(NSString*)_Name : (NSString*)_Surname :(NSString*)_Age;
-(id) AddArrayDictionaryObject:(NSArray*)_ArrayObject : (NSArray*)_ArrayKey;
-(id) AddMultiArrayType:(id)_ArrayObject;
-(void) ShowMultiArrayType:(id)_ArrayObject;
@end
现在添加你的Objective-C的文件----客观厘米
#import "yourheader.h"
@implimentation yourheader
@synthesize DictionaryArrayType;
@synthesize CaptionTitle;
@synthesize ObjectValue;
@synthesize MultiArrayType;
-(id)init {
if(self = [super init]){
NSString* const NAME = @"NAME";
NSString* const SURNAME = @"SURNAME";
NSString* const AGE = @"AGE";
//Adding fixed content to CaptionTitle Array
[self setCaptionTitle:[NSArray arrayWithObjects:NAME, SURNAME, AGE, nil]];
//add values to ObjectValue array
[self AddArrayObjects:@"Bob" :@"Obi" :@"200"];
//add values to dictionary
[self AddDictionaryArrayType:ObjectValue :CaptionTitle];
//Add to the Multi dimensional array [][]
[self AddMultiArrayType:DictionaryArrayType];
//add the second row values to ObjectValue array
[self AddArrayObjects:@"Barack" :@"Obama" :@"50"];
//add values to dictionary
[self AddDictionaryArrayType:ObjectValue :CaptionTitle];
//Add to the Multi dimensional array [][]
[self AddMultiArrayType:DictionaryArrayType];
//display the 2d Array
[self ShowMultiArrayType:MultiArrayType];
}
return self;
}
-(id)AddArrayObjects:(NSString *)_name :(NSString *)_surname :(NSString *)_age {
//Set the Array Objects;
[self setObjectValue:[NSArray arrayWithObjects:_name, _surname, _age, nil]];
return self;
}
-(id)AddDictionaryArrayType:(NSArray *)_ArrayObject :(NSArray*)_ArrayKey {
if(!DictionaryArrayType) {
//initialize disctionary
[self setDictionaryArrayType:[NSMutableDictionary dictionary]];
}
//add array obeject and Fixed Key decleared in CaptionTitle array
DictionaryArrayType = [NSMutableDictionary dictionaryWithObjects:_ArrayObject forKeys:_ArrayKey];
return self;
}
-(id) AddMultiArrayType:(id)_ArrayObject {
if(!MultiArrayType) {
[self setMultiArrayType:[NSMutableArray array]];
}
[MultiArrayType addObject:_ArrayObject];
return self;
}
-(void)ShowMultiArrayType:_ArrayObject {
for(id objects in _ArrayObject) {
for(id key in objects) {
NSLog(@"%@ key = : object = %@", key, [objects objectForKey:key]);
}
}
}
@end;
要完成添加到您的appdelegate.m文件里面的应用程序
yourclassname* _yourclasspointer = [[yourclassname alloc] init];
[_youclasspointer ShowMultiArrayType:[_yourclasspointer MultiArrayType]];
你应该在你的控制台中看到它。
使用NSMutableArray里,像这样
NSMutableArray *curRow; /* use to access the row while loading with objects */
NSMutableArray *array = [[NSMutableArray alloc] init]; /* your main multidim array */
curRow = [NSMutableArray array];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[array addObject:curRow]; /* first row is added */
/* rinse and repeat */
curRow = [NSMutableArray array];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[array addObject:curRow];
谢谢 - 这是完美的。我将这个标记为我的答案,因为它提供了一个通用的解决方案 - 用于在运行时创建动态数组。下一个答案显示了固定大小数组的用法。 – Sam
这个答案好多了 – michaelsnowden
要调用一个特定的对象,你可以调用它所在的行(第一组“行”将是0,第二组是1等)。然后调用“addObject”(列数)它是...第一个“addObject”是“0”,第二个是“1”,等等 '[[array objectAtIndex:/ *行号* /] objectAtIndex:/ *列号* /] ;' –
下面是你的理解的例子...
NSMutableArray * multiArray = [[NSMutableArray alloc] initWithCapacity:5];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2,a_val3,a_val4]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val5]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2,a_val3,a_val4,a_val5,a_val6]];
而不要忘记释放到multiArray
阵列因为我们有alloced
它...
您的解决方案忽略了客观的c语言约定,例如以小写字母开头的属性名称,命名所有方法参数并始终使用声明属性的getter和setter方法 – jackslash