【问题标题】:How to build an array from an array of arrays如何从数组数组构建数组
【发布时间】:2012-07-27 03:13:10
【问题描述】:

我对 iOS 开发还很陌生。

我有一个 viewController,它包含一个作为自定义类对象的属性。我们将该自定义类称为 ClassA。 ClassA 的对象有一个属性,它是另一个自定义类的对象的 NSMutableArray,我们将称之为 ClassB。 ClassB 有一个属性,它也是 CLLocation 类型的对象的 NSMutableArray。

从 viewController 的一个方法内部,我需要创建一个 CLLocationCoordinate2D 结构的 C 数组(CLLocationCoordinate2D 是 CLLocation 的一个属性)。这些 CLLocationCoordinate2D 中的每一个都需要来自 ClassB 和 ClassA 中的所有对象所拥有的所有 CLLocation 对象。如果我理解我所做的,我相信我有一个 3-D 数组。

我一直纠结于如何组装这个结构数组。如果它只是一个数组,我会这样做:

NSUInteger numberOfSteps = [objectOfClassX count];    
CLLocationCoordinate2D coordinates[numberOfSteps];

for (NSInteger index = 0; index < numberOfSteps; index++) {
    CLLocation *location = [objectOfClassX objectAtIndex:index];
    CLLocationCoordinate2D coordinate = location.coordinate;

    coordinates[index] = coordinate;
}

但是,我正在努力获取第一个数组中的每个对象,然后是第二个数组中的每个对象,然后是 CLLocationCoordinate2D 中的语法。

【问题讨论】:

    标签: objective-c ios multidimensional-array


    【解决方案1】:

    迭代一次以获得坐标的总数,然后再次迭代以将它们复制到新分配的数组中。

    NSInteger coordCount = 0, coordIndex = 0;
    for(ClassA *a in collectionOfA)
        for(ClassB *b in a.collectionOfB)
            coordCount += [b.locations count];
    
    CLLocationCoordinate2D coords[coordCount];
    
    for(ClassA *a in collectionOfA)
      for(ClassB *b in a.collectionOfB)
        for(CLLocation *location in b.locations)
            coords[coordIndex++] = location.coordinate;
    

    【讨论】:

    • 请注意,如果您想将数组实际存储在 ivar 或其他地方,则需要使用 CLLocationCoordinate2D *coords = malloc(coordCount * sizeof(CLLocationCoordinate2D)) 代替,稍后手动 free 内存,因为显示的数组以上是在堆栈上分配的,如果其包含范围结束,将消失。
    • 这太完美了,谢谢!还要感谢数组持久性提示 - 我不会明白这一点。
    【解决方案2】:

    试试看:coordinates = [NSMutableArray arrayWithArray: objectOfClassX];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多