好的,noob问题!我想动态地将数据添加到二维数组(基本上,用C ++术语表示多维向量)。我试图使用addObject:atIndex方法,但它似乎将对象添加到2D数组中的所有列,而不是我的索引指定的特定列。以下是我的代码的相关部分:
2D阵列初始化:
for (NSInteger i=0; i<numberOfChannels; i++) {
[allChannelArrays addObject:newChannelArray]; //newChannelArray is an empty array
}
添加数据的方法:
-(void)updatePlot:(double)arrayvalue :(CPTPlot *)plot :(NSUInteger)i {
static int j=0;
[[allChannelArrays objectAtIndex:j] addObject:[NSNumber numberWithDouble:(arrayvalue + j*0.001)]]; //Here lies the problem!
NSLog(@"number of elements in 1D array: %d", [allChannelArrays[j] count]);
[plot insertDataAtIndex:[allChannelArrays[j] count]-1 numberOfRecords:1];
j++;
if (j>=self.totalChannels.numberOfChannels) {
j=0;
}
}
以下是显示数组中值的截图:
在执行语句之前(注意allChannelsArray的所有列中的0个对象):
执行语句后(在allChannelsArray的所有列中都注释1个对象):
我也尝试了以下方法: 1.使用insertObject:atIndex方法并传递相应列的最后一个元素。 2.由于addObject似乎影响了所有列,我让它发生并尝试使用它重新将值分配给一个位置 -
allChannelArrays [j] [([allChannelArrays[j] count]-1)] = [NSNumber numberWithDouble:(arrayvalue + j*0.001)];
但即便是第二种方法也改变了所有列中的值。
我确信我犯了一些简单的错误,但我无法弄明白。这甚至是初始化2D阵列和添加数据的正确方法吗?非常感谢!
答案 0 :(得分:3)
您正在向外部数组的所有4个索引添加相同的数组,而不是每次都分配一个新数组。
您的初始化代码应为
for (NSInteger i=0; i<numberOfChannels; i++) {
[allChannelArrays addObject:[NSMutableArray new]];
}