我正在尝试以这种方式使用像 2D 这样的 1D 数组,但我无法弄清楚。给定一个这样的数组:
NSArray *myArray = @[@0,@1,@2,@3,@4,@5];
是否可以使用这样定义的 NSIndexPath 访问“4”?:
NSIndexPath *index = [NSIndexPath indexPathForRow:1 inSection:1];
我正在尝试以这种方式使用像 2D 这样的 1D 数组,但我无法弄清楚。给定一个这样的数组:
NSArray *myArray = @[@0,@1,@2,@3,@4,@5];
是否可以使用这样定义的 NSIndexPath 访问“4”?:
NSIndexPath *index = [NSIndexPath indexPathForRow:1 inSection:1];
我想你想做这样的事情:
NSArray* array= @[ @[ @1,@2,@3 ] , @[@2, @4, @6] ];
NSIndexPath* path=[[NSIndexPath alloc]initWithIndexes: (const NSUInteger[]){0,0} length:2];
NSLog(@"%@",array [[path indexAtPosition: 1]] [[path indexAtPosition: 0]]);
NSArray* myArray= @[ @[ @"Zero.Zero",@"Zero.One",@"Zero.Two" ] , @[ @"One.Zero", @"One.One", @"One.Two" ] ] ;
NSLog(@"%@", myArray[1][2] ) ; // logs 'One.Two'
更一般地,您可以使用维度 A 的索引路径来遍历维度 B 的数组。您还可以制定一条规则,说明当路径或数组中有额外维度时该怎么做。
该规则可能看起来像这样:如果我用完了路径尺寸,则返回我在路径末端找到的任何对象。如果我用完了数组维度(例如您的问题中的情况),则丢弃路径的其余部分并返回我找到的任何非数组。
在代码中:
- (id)objectInArray:(id)array atIndexPath:(NSIndexPath *)path {
// the end of recursion
if (![array isKindOfClass:[NSArray self]] || !path.length) return array;
NSUInteger nextIndex = [path indexAtPosition:0];
// this will (purposely) raise an exception if the nextIndex is out of bounds
id nextArray = [array objectAtIndex:nextIndex];
NSUInteger indexes[27]; // maximum number of dimensions per string theory :)
[path getIndexes:indexes];
NSIndexPath *nextPath = [NSIndexPath indexPathWithIndexes:indexes+1 length:path.length-1];
return [self objectInArray:nextArray atIndexPath:nextPath];
}
像这样称呼它...
NSArray *array = [NSArray arrayWithObjects:@1, [NSArray arrayWithObjects:@"hi", @"there", nil], @3, nil];
NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:1];
indexPath = [indexPath indexPathByAddingIndex:1];
NSLog(@"%@", [self objectInArray:array atIndexPath:indexPath]);
对于给定的索引路径,这会产生“那里”的输出。