使用相同的NSString有效填充多个NSMutableArray

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)

另外,我必须分别为每个数组添加字符.似乎效率很低.我想知道是否有更聪明的方法.

rma*_*ddy 5

你的第一种方法比第二种方法要好得多.但是我做了一些改变以使其变得更好.

从酒店开始:

@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)

请注意,您countfor循环中引用该属性将不起作用.它从空开始,因此count将为零,循环不会执行.

现在,您可以像访问以下内容一样访问特定值:

NSString *value = self.columns[4][3]; // read

self.columns[2][5] = @"Hello"; // write
Run Code Online (Sandbox Code Playgroud)