Objective c 在4x4网格中查找长方体的相邻长方体

Objective c 在4x4网格中查找长方体的相邻长方体,objective-c,arrays,nsmutablearray,nsarray,Objective C,Arrays,Nsmutablearray,Nsarray,我有一个1到16个数字的数组self.gridArray=[[NSMutableArray alloc]initWithObjects:@“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“nil] 我正在使用此函数随机化或洗牌数组项 -(void)randomizeArray:(NSMutableArray *)myArray{ NSUInteger count = [myArray count

我有一个1到16个数字的数组
self.gridArray=[[NSMutableArray alloc]initWithObjects:@“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“nil]
我正在使用此函数随机化或洗牌数组项

-(void)randomizeArray:(NSMutableArray *)myArray{
    NSUInteger count = [myArray count];

    for (NSUInteger i = 0; i < count; ++i)
    {
        unsigned long int nElements = count - i;
        unsigned long int n = (arc4random() % nElements) + i;
        [myArray exchangeObjectAtIndex:i withObjectAtIndex:n];
    }

    NSLog(@"%@",myArray);

}
-(void)randomizarray:(NSMutableArray*)myArray{
NSU整数计数=[myArray计数];
对于(整数i=0;i
此功能工作正常。我的问题是,假设它给我一个洗牌数组作为
(9,15,3,5,1,6,7,8,14,13,12,2,16,10,4,11)
,我把它放在
4x4
网格中。现在我想找到相邻的数字,比如说
7
,它们将是
6,3,8,12
如何找到它们?
另一个例子是,如果我想找到
11
的相邻数字,它们将是
2,4

试试这个:

NSInteger idx = (NSInteger)[myArray indexOfObject:@"11"]; //obtain the index of the target number
NSMutableArray *adjacentNumbers = [[NSMutableArray alloc] init];

if ( idx+4 < 16 ) { [adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx+4)]]; } //number below
if ( idx+1 < 16 && (idx%4 != 3) ) { [adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx+1)]]; } //number on the right
if ( idx-4 >= 0 ) { [adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx-4)]]; } //number above
if ( idx-1 >= 0 && (idx%4 != 0) ) { [adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx-1)]]; } //number on the left
NSInteger idx=(NSInteger)[myArray indexOfObject:@“11”]//获取目标编号的索引
NSMUTABLEARRY*邻接数=[[NSMUTABLEARRY alloc]init];
if(idx+4<16){[adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx+4)];}//下面的数字
如果(idx+1<16&(idx%4!=3)){[adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx+1)];}//右边的数字
如果(idx-4>=0){[adjacentNumbers addObject:[myArray objectAtIndex:(NSInteger)(idx-4)];}//上面的数字
如果(idx-1>=0&&(idx%4!=0)){[adjacentNumbers addObject:[myArray objectAtIndex:(NSUInteger)(idx-1)];}//左边的数字

如果有4个相邻的数字,则解决方案有效。例如,如果数字在
4x4
网格中的序列
1,2,3,4….,15,16
,如果将
indexOfObject
设置为
1
,如果(idx-4>=0)
条件,则会在
上给出一个错误。@TalhaCh我忘记了
idx
nsuiger
,所以当它变为“低于0”时,它下溢为一个大的正整数。我编辑了答案,试着看看它是否有效。这很好。但是如果输入
13
作为
indexOfObject
显示3个值
14,12,9
现在
14,9
有效,但
12
不是,因为它是第三行的最后一个对象。如果你有解决方案,请编辑你的答案,不管怎样,我得到了我想要的,谢谢你。@TalhaCh,现在应该可以了!之前懒得测试:P