以动态方式将数组分成多个? OBJ-C

时间:2012-03-26 07:16:13

标签: iphone objective-c ios ipad

我目前有这种方法:

-(void)seperateGuides
{
   DLog("GetGuideListCount: %i", [[appDelegate getGuideList] count]);

   columnOneArray = [[NSMutableArray alloc] init];
   columnTwoArray = [[NSMutableArray alloc] init];
   columnThreeArray = [[NSMutableArray alloc] init];

   for (int i = 0; i < [[appDelegate getGuideList] count]; i = i + 3) {
      [columnOneArray addObject:[[appDelegate getGuideList]objectAtIndex:i]];
   }

   for (int i = 1; i < [[appDelegate getGuideList] count]; i = i + 3) {
      [columnTwoArray addObject:[[appDelegate getGuideList]objectAtIndex:i]];
   }

   for (int i = 2; i < [[appDelegate getGuideList] count]; i = i + 3) {
      [columnThreeArray addObject:[[appDelegate getGuideList]objectAtIndex:i]];
   }
}

需要更加动态,所以我可以定义我想要的数组,然后获取数组。

我正在考虑的不同可能性是使它成为一个多维数组(虽然我不确定如何在Objectvie-C中处理它),或者创建一个简单循环的方法,就像我定义的那样,问题是,我不太确定如何获得不同的阵列。

非常感谢一个简单的算法或其他可能的解决方案。

4 个答案:

答案 0 :(得分:3)

你所描述的算法听起来与我们将一副牌交到多手牌时所做的相同,所以我会这样做:

- (NSArray *)dealObjects:(NSArray *)objects intoArrays:(NSInteger)numArrays
{
    NSMutableArray *arrays = [NSMutableArray arrayWithCapacity:numArrays];
    for (a = 0; a < numArrays; a++) {
        [arrays addObject:[NSMutableArray arrayWithCapacity:[objects count] / numArrays];
    }
    for (i = 0; i < [objects count]; i++) {
        [[arrays objectAtIndex:i % numArrays] addObject:[objects objectAtIndex:i]];
    }
    return arrays;
}

答案 1 :(得分:0)

您可以将多个数组添加到另一个数组中,

-(void)seperateGuides:(int)columnCount
{


   rootArray=[[NSMutableArray alloc] init];
   for(int i=0;i<columnCount;i++)
   {
     column = [[NSMutableArray alloc] init];
     for(int j=i;j<[[appDelegate getGuideList] count];j=j+3)
     {

      [column addObject:[[appDelegate getGuideList]objectAtIndex:j]];
      [rootArray addObject:column];
      [column release];
     }
   }
}

答案 2 :(得分:0)

非常简单。只需在迭代数据集时将新的NSArray对象添加到根数组中。

- (void)seperateGuides {
    DLog("GetGuideListCount: %i", [[AppDelegate getGuideList] count]);

    NSArray *root = [[NSArray alloc] init];
    int dimensions = anyIntGreaterThanZero;

    for (int i = 0; i < dimensions; i += dimensions) {
        NSArray *branch = [[NSArray alloc] init];
        int k = 0;
        for (k += i; k < [[AppDelegate getGuideList] count]; k += dimensions) {
            [branch addObject:[[AppDelegate getGuideList] objectAtIndex:k]];
        }
        [root arrayByAddingObject:branch];
    }
}

答案 3 :(得分:0)

-(void)seperateGuides
{
     NSMutableArray *parentArray = [[NSMutableArray alloc]init];

     int count =  [[appDelegate getGuideList] count];
     int TOTAL_COLUMNS = 3;//Define number of columns here
     for (int i = 0; i <count; i++)
     {
          int columnNo = i % TOTAL_COLUMNS;

          if(parentArray.count > columnNo)
          {
               NSMutableArray *innerArray = [parentArray objectAtIndex:columnNo];
               [innerArray addObject:[[appDelegate getGuideList]objectAtIndex:i]];
          }
          else
          {
               NSMutableArray *innerArray = [NSMutableArray arrayWithObject:[[appDelegate getGuideList]objectAtIndex:i]];
               [parentArray insertObject:innerArray atIndex:columnNo];
          }
     }
}

希望这会有所帮助......

这里parentArray将NSMutableArray作为其成员。每个数组代表一列中的对象。