0

配列内の要素を分離しようとしています。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];

}

たとえば、私の配列は次のようになります。

  • 座標: 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のアイデアのバリエーションであることが判明しました。それは私が追加するかもしれない非常にセクシーなアイデアです. ジェロと関係者全員に感謝します。

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 から 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)
    [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 に答える