我正在尝试隔离数组中的元素。我有一个包含超过100000个NSNumber对象的NSArray。我遇到的问题是它们以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];
}
例如,我的数组如下所示:
我需要的是一种根据X,Y和Z将正确值组合在一起的方法,因为它们是空间中的点,如:
依旧......
除了它们都是NSNumber对象之外,数组中的对象之间没有相似之处。
提前致谢!
我目前正在NSTextView中将此数组作为字符串打印,我无法弄清楚如何在不使用此代码搞乱循环的情况下隔离字符串:
[printgcodetoconsole appendFormat: @"\nCOORDINATE: %@", coordinate];
我真的更喜欢更喜欢的东西:
NSNumber * X;
NSNumber * Y;
NSNumber * Z;
[printgcodetoconsole appendFormat: @"\n X%@, Y%@, Z%@", X, Y, Z];
答案 0 :(得分: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];
}
}
答案 1 :(得分: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];
}
答案 2 :(得分: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];
}