我对如何在多维数组中添加对象感到困惑。
只是一个简单的数组初始化多维数组是否相同?
这是我的初始化。
testList = [[NSMutableArray alloc] init];
我需要做类似
的事情testList[i][j] = item;
我试过
[[[testList objectAtIndex:i]objectAtIndex:j] addObject:item];
但它似乎不起作用:(
答案 0 :(得分:5)
你要添加很多C才能做到这一点。这对于了解NSMutableArray如何工作以及与C / C ++中已知的2D数组相比有何不同非常重要。
在可变数组中,您可以存储另一个数组。例如:
NSMutableArray *first = [[NSMutableArray alloc] init];
NSMutableArray *second = [[NSMutableArray alloc] init];
[first addObject:second];
现在你在第一个数组的第一行有数组!这很像C / C ++ 2D数组。
因此,如果您想将某个对象添加到“0,0”,请执行以下操作:
NSString *mytest = [[NSString alloc] initWithString:@"test"];
[second addObject:mytest];
[first addObject:second];
现在你的第二个包含 NSStrings ,第一个包含第二个。 现在您可以按照自己的意愿循环播放。
<强> ----编辑: 强> 如果你想要1,0你只需要另一个 second NSMutableArray实例。例如,你有这个数组:
所以这里你将在 second 数组中有3个元素。
NSMutableArray *first = [[NSMutableArray alloc] init];
for(int i =0 ; i < your_size_condition ; i++) {//if you have size, if don't not a problem, you could use while!
NSArray *second = [[NSArray alloc] initWithObjects:"@something",@"somethingelse",@"more",nil];
[first addObject:second];
}
您可能希望实施NSCopying protocol来执行此操作。
答案 1 :(得分:5)
如果需要固定大小的数组,则使用纯C数组。在使用动态ObjC数组之前,需要创建它:
NSMutableArray* array = [NSMutableArray arrayWithCapacity:N];
for(int i=0; i<N; i++) {
[array addObject:[NSMutableArray arrayWithCapacity:M]];
}
UPD:以下方法可能有助于使用此类数组:
[[array objectAtIndex:i] addObject:obj];
[[array objectAtIndex:i] insertObject:obj atIndex:j];
[[array objectAtIndex:i] replaceObjectAtIndex:j withObject:obj];
答案 2 :(得分:0)
为了扩展@ onegray的答案,你可以设置一些类别方法,使软多维数组更易于处理。
MultiMutableArray.h
@interface NSMutableArray(MultiMutableArray)
-(id)objectAtIndex:(int)i subIndex:(int)s;
-(void)addObject:(id)o toIndex:(int)i;
@end
@implementation NSMutableArray(MultiMutableArray)
MultiMutableArray.m
#import "MultiMutableArray.h"
-(id)objectAtIndex:(int)i subIndex:(int)s
{
id subArray = [self objectAtIndex:i];
return [subArray isKindOfClass:NSArray.class] ? [subArray objectAtIndex:s] : nil;
}
-(void)addObject:(id)o toIndex:(int)i
{
while(self.count <= i)
[self addObject:NSMutableArray.new];
NSMutableArray* subArray = [self objectAtIndex:i];
[subArray addObject: o];
}
@end
示例,MultiArrayTests.m
#import <SenTestingKit/SenTestingKit.h>
#import "MultiMutableArray.h"
@interface MultiArrayTests : SenTestCase
@end
@implementation MultiArrayTests
-(void)testMultiArray
{
NSMutableArray* a = NSMutableArray.new;
[a addObject:@"0a" toIndex:0];
[a addObject:@"0b" toIndex:0];
[a addObject:@"0c" toIndex:0];
[a addObject:@"1a" toIndex:1];
[a addObject:@"1b" toIndex:1];
[a addObject:@"2a" toIndex:2];
STAssertEquals(a.count, 3U, nil);
NSMutableArray* a1 = [a objectAtIndex:0];
NSMutableArray* a2 = [a objectAtIndex:1];
NSMutableArray* a3 = [a objectAtIndex:2];
STAssertEquals(a1.count, 3U, nil);
STAssertEquals(a2.count, 2U, nil);
STAssertEquals(a3.count, 1U, nil);
}
@end
我已在http://peterdeweese.tumblr.com/post/27411932460/soft-multi-dimensional-arrays-in-objective-c
写了更多详细信息答案 3 :(得分:-1)
[[testList objectAtIndex:i] insertObject:item atIndex:j];