noo*_*obs 3 arrays objective-c
我有一个NSMutableArray容量7.我想把每个索引a放入NSMutableArray容量6.在这6个插槽的每一个中,我想要字符A.
其他要求是我需要能够访问每个数组中的每个索引.我之前有这样的代码
-(id)init{
self = [super init];
self.array = [[NSMutableArray alloc]initWithCapacity:7];
for (NSUInteger i = 0; i < self.board.count; i++) {
NSMutableArray *subArray = [[NSMutableArray alloc]init];
for (NSUInteger i = 0; i <subBoard.count; i++) {
[subArray addObject:@"A"];
}
[self.array insertObject:subArray atIndex:i];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我想通过访问主数组在subArray中找到索引时,我必须进行各种转换并创建新变量以显示这些指针是NSMutableArrays.
然后我有了这个代码
#import <Foundation/Foundation.h>
@interface NewArray : NSMutableArray
@property (strong, nonatomic) NSMutableArray *column1;
@property (strong, nonatomic) NSMutableArray *column2;
@property (strong, nonatomic) NSMutableArray *column3;
@property (strong, nonatomic) NSMutableArray *column4;
@property (strong, nonatomic) NSMutableArray *column5;
@property (strong, nonatomic) NSMutableArray *column6;
@property (strong, nonatomic) NSMutableArray *column7;
-(id)init
@end
Run Code Online (Sandbox Code Playgroud)
但是我该如何编写init方法,所以我不必做这样的事情
-(id)init{
self = [super init];
self = [[NSMutableArray alloc]initWithCapacity:7];
self.column1 = [[NSMutableArray alloc]initWithCapacity:6];
[self insertObject:self.column1 atIndex:0];
//etc. for each additional array to be added
return self;
}
Run Code Online (Sandbox Code Playgroud)
另外,我必须分别为每个数组添加字符.似乎效率很低.我想知道是否有更聪明的方法.
你的第一种方法比第二种方法要好得多.但是我做了一些改变以使其变得更好.
从酒店开始:
@property (strong, nonatomic) NSMutableArray<NSMutableArray<NSString *> *> *columns;
Run Code Online (Sandbox Code Playgroud)
这声明您有一个包含可变数组的可变数组,该数组包含字符串.
然后你的init方法:
- (instancetype)init {
self = [super init];
if (self) {
_columns = [[NSMutableArray alloc] initWithCapacity:7];
// Just create one subarray filled with "A"
NSMutableArray<NSString *> *subArray = [[NSMutableArray alloc] initWithCapacity:6];
for (NSUInteger i = 0; i < 6; i++) {
[subArray addObject:@"A"];
}
// Now fill the main array with copies of the sub-array
for (NSUInteger i = 0; i < 7; i++) {
[_columns addObject:[subArray mutableCopy]];
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您count在for循环中引用该属性将不起作用.它从空开始,因此count将为零,循环不会执行.
现在,您可以像访问以下内容一样访问特定值:
NSString *value = self.columns[4][3]; // read
self.columns[2][5] = @"Hello"; // write
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |