0

基本的に、100 個の NSMutableArray のデータをより適切に管理する方法を見つける必要があります。

のように(私は実際にこれを行っていません):

NSMutableArray *array1;
NSMutableArray *array2;
NSMutableArray *array3;
//etc..

次のような複数のファセットを持つものが必要です。

NSMutableCombinationArray *theMassiveArray;

[theMassiveArray addObject:theObject forArray:0 atIndex:0];

最後に、私はこのようなことをしたい:

//in applicationdidfinishlaunching
loopCount = 0;


- (void) frameTimer:(NSTimer*)timer { //called every second

    startingValue = 0;

    for (int i = 1; i <= 100; i++)
    {
        NSString *dmxValues = [NSString stringWithFormat: @"%@,%@,%@,%@,%@", [DMXChannelArray objectAtIndex:startingValue], [DMXChannelArray objectAtIndex:startingValue+1], [DMXChannelArray objectAtIndex:startingValue+2], [DMXChannelArray objectAtIndex:startingValue+3], [DMXChannelArray objectAtIndex:startingValue+4]];

        [theMassiveArray addObject:dmxValues forArray:i-1 atIndex:loopCount];

        startingValue = startingValue + 5;
    }

    loopCount = loopCount + 1;

}

//NOTE DMXChannelArray is updated in another class with current DMX values from a controller.

したがって、DMX の 512 チャネルがあり、各アレイは 5 チャネルを保持する必要があります。基本的に 1 秒に 1 回の解像度で 500 個の DMX チャネル値を保存する録音アプリです。

これどうやってするの?これを行う最善の方法は何ですか?明らかに、100 個の NSMutableArray を作成して、これをすべて手動で行うことは避けたいと考えています。

参考までに、記録が終了したら、ユーザーはエクスポートするグループ (5 チャネル) の数を選択します。次に、その数に応じて、別の for ループが NSMutableCombinationArray を通過し、最終的な配列をエクスポートします。

4

3 に答える 3

2

ラッパー クラスを作成します。

@interface MultiDimensionalMutableArray : NSObject

- (void)insertObject:(id)obj atIndex:(NSUInteger)idx intoArrayAtIndex:(NSUInteger)arrIdx;
- (id)objectAtIndex:(NSUInteger)idx inArrayAtIndex:(NSUInteger)arrIdx;

@end

@implementation MultiDimensionalMutableArray
{
    NSMutableArray * arrays;
}

- (id)init
{
    // init boilerplate

    arrays = [NSMutableArray arrayWithCapacity:100];
    for( int i = 0; i < 100; i++ ){
        [arrays addObject:[NSMutableArray array]];
    }

    return self;
}

- (void)insertObject:(id)obj atIndex:(NSUInteger)idx intoArrayAtIndex:(NSUInteger)arrIdx
{
    //TODO: Include appropriate bounds checking
    NSMutableArray * innerArray = [arrays objectAtIndex:arrIdx];
    [innerArray insertObject:obj atIndex:idx];
}

- (id)objectAtIndex:(NSUInteger)idx inArrayAtIndex:(NSUInteger)arrIdx
{
    return [[arrays objectAtIndex:arrIdx] objectAtIndex:idx];
}

@end
于 2013-02-06T21:43:32.153 に答える
1

これがあなたがすべきことです

NSMutableArray *massiveArray = [[NSMutableArray alloc] init];

for(int i=0; i<500; i+=5) {
    NSDictionary *dataDict = [[NSDictionary alloc] initWithObjectsAndKeys:[DMXChannelArray objectAtIndex:i], @"Key1", [DMXChannelArray objectAtIndex:i+1], @"Key2", [DMXChannelArray objectAtIndex:i+2], @"Key3", [DMXChannelArray objectAtIndex:i+3], @"Key4", [DMXChannelArray objectAtIndex:i+4], @"Key5", nil];
    [massiveArray addObject:dataDict];        
}

最後に、masssiveArray には 100 個の辞書が含まれています。たとえば、45 番目の辞書の 2 番目の値にアクセスするには、次のようにします。

NSString *value = [[massiveArray objectAtIndex:44] objectForKey:@"Key2"];

お役に立てれば

于 2013-02-06T21:43:23.880 に答える
0

良い

NSMutableDictionary *dict = [NSMutableDictionary alloc] initWithCapacity:100];
for(int i=1; i<=100; i++){
  NSString *dmxValues = [NSString stringWithFormat: @"%@,%@,%@,%@,%@", [DMXChannelArray objectAtIndex:startingValue], [DMXChannelArray objectAtIndex:startingValue+1], [DMXChannelArray objectAtIndex:startingValue+2], [DMXChannelArray objectAtIndex:startingValue+3], [DMXChannelArray objectAtIndex:startingValue+4]];
  [dict setObject:[NSArray arrayWithObject:dmxValues] forKey:[NSNumber numberWithInt:(i-1)];
}

値を取得するには

[dic objectForkey:[NSNumber numberWithInt:array_index][array_element_index];
于 2013-02-06T21:45:08.650 に答える