0

我正在尝试隔离数组中的元素。我有一个 NSArray 包含超过 100000 个 NSNumber 对象。我遇到的问题是它们以 3 为增量排列。

processarray = [[NSMutableArray alloc] init];

for (loopstart = 0; loopstart < arraycount; loopstart ++)

{
    arrayvalue = [[mesharray objectAtIndex: loopstart] floatValue];
    coordinate = [NSNumber numberWithFloat: arrayvalue];
    [processarray addObject: coordinate];
    [printgcodetoconsole appendFormat: @"\nCOORDINATE: %@", coordinate];

}

例如,我的数组如下所示:

  • 坐标:5567
  • 坐标:1065
  • 坐标:1564
  • 坐标:3432
  • 坐标:6123
  • 坐标:9345
  • 坐标:1856
  • 坐标:2765
  • 坐标:1998
  • 坐标:9087
  • 坐标:2234
  • 坐标:5467

我需要的是一种将正确值按照 X、Y 和 Z 组合在一起的方法,因为它们是空间中的点,例如:

  • 新阵列对象:(X5567、Y1065、Z1564)

等等……</p>

数组中的对象之间没有相似之处,只是它们都是 NSNumber 对象。

提前致谢!

我目前正在将此数组打印为 NSTextView 中的字符串,但我无法弄清楚如何在不使用此代码弄乱循环的情况下隔离字符串:

[printgcodetoconsole appendFormat: @"\nCOORDINATE: %@", coordinate];

我真的更喜欢类似的东西:

NSNumber * X;
NSNumber * Y;
NSNumber * Z;

[printgcodetoconsole appendFormat: @"\n X%@, Y%@, Z%@", X, Y, Z];
4

3 回答 3

1

您应该检查计数器何时loopstart是 3 的倍数并将最后 3 个值分组到子数组中:

NSMutableArray *subArray = [NSMutableArray array];
for (loopstart = 0; loopstart < arraycount; loopstart ++) {
    arrayvalue = [[mesharray objectAtIndex:loopstart] floatValue];
    coordinate = [NSNumber numberWithFloat: arrayvalue];
    [subArray addObject:coordinate];
    if (loopstart % 3 == 0) {
        [processarray addObject:subArray];
        subArray = [NSMutableArray array];
    }
}
于 2013-10-23T22:12:28.537 回答
0

非常感谢你们……答案原来是 JeroValli 关于使用模数的想法的一种变体。我可能会添加一个该死的性感想法。感谢 Jero 和其他所有相关人员。

for (loopstart = 0; loopstart < arraycount; loopstart ++)

        {
            arrayvalue = [[mesharray objectAtIndex: loopstart] floatValue];
            point = [NSNumber numberWithFloat: arrayvalue];
            [coordinates addObject: point];
            if (loopstart % 3 == 0)
            {
                [printgcodetoconsole appendFormat: @"\nCOORDINATE: X%@", point];
            }
            else if (loopstart % 3 == 1)
            {
                [printgcodetoconsole appendFormat: @"\nCOORDINATE: Y%@", point];
            }
            else if (loopstart % 3 == 2)
            {
                [printgcodetoconsole appendFormat: @"\nCOORDINATE: Z%@", point];
            }
于 2013-10-24T16:03:22.713 回答
0

这个简单的代码将从meshArray 中取出每三个项目,将它们放入一个新数组中并将其插入到一个更大的数组中(这样您就有了一个数组数组)。

NSArray *meshArray = /* obtain from somewhere */;
NSAssert(([meshArray count] % 3) == 0, @"Array does not contain multiple of 3");

NSMutableArray coordinates = [NSMutableArray array];

for (NSUInteger i = 0; i < [meshArray count]; i += 3)
    [coordinates addObject:[meshArray subarrayWithRange:NSMakeRange(i, 3)]];

或者,如果您愿意,您可以使用字典来键入它们:

NSArray *meshArray = /* obtain from somewhere */;
NSAssert(([meshArray count] % 3) == 0, @"Array does not contain multiple of 3");

NSMutableArray coordinates = [NSMutableArray array];

for (NSUInteger i = 0; i < [meshArray count]; i += 3)
{
    NSDictionary *coordinate = @{ @"X" : meshArray[i], @"Y" : meshArray[i + 1], @"Z" : meshArray[i + 2] };
    [coordinates addObject:coordinate];
}
于 2013-10-23T22:21:27.427 回答