2009-04-03 23 views
1

私のUITableViewのセクションの行を追跡する必要があります。このため、私は各セクションにある量の行を配置する配列を作成したいと思います。この配列は一定のサイズでなければなりません。NSMutableArrayの代わりにNSArrayを使う方が良いと思います。配列の初期値を0に設定する方法

私の質問は、どのようにNSInteger型の特定の数のオブジェクトを最初に0に設定して初期化できますか?そして、私はそれを変更することができます - 私の特別なケースでは、必要なときに各アイテムの価値を高めるために?例えば

while (objects) 
{ 
myArray.(object string's first letter transformed to int)++; 
} 

答えて

2

配列は、特定のサイズと、すべての定期的な整数(あなたの例ではNSInteger)である場合は、その理由だけでは使用しません単純な整数のポインタ?例えば:あなたの要件はすべて同じ、プリミティブ型からなるシンプルな、固定容量アレイに対して呼び出す場合

- (id)init { 
    if((self = [super init])) { 
    // assume this is an instance variable of type NSInteger *myArray; 
    myArray = (NSInteger*)calloc(arraySize, sizeof(NSInteger)); 

    // Do any other initialization that you need 
    } 
    return self; 
} 

- (void)myMethod { 
    // Do whatever you need 
    while(objects) { myArray[whatever]++; } 
} 

- (void)dealloc { 
    free(myArray); 
    [super dealloc]; 
} 

、私はシンプルなソリューションがベストだと思います。配列の長さが決して変化しない場合(つまり、コンパイル時の長さを知っている場合)、ポインタの代わりにインスタンス変数としてNSInteger配列を使用することができます。つまり、メモリの割り当てに対処する必要はありません。それを解放する。また、その場合は、自動的にゼロエンドの配列を取得します。

1
NSMutableArray *a = [[NSMutableArray alloc] init]; 
int i; 

for (i = 0; i < ...; ++i) 
    [a addObject:[NSNumber numberWithInt:0]]; 
0

あなたはこのような全体の配列を反復処理する必要があります:あなたが変更可能なを使用する必要があります配列を変更する必要があるとして

for (var key in list) { 
    list[key] = // Your new object here; 
} 
0

不変の配列ではなく配列です。

あなたが書くことができるで開始する10の項目の配列を初期化する必要がある場合:

NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:10]; 

for (NSUInteger i = 0; i < 10; i++) { 
    [mutableArray insertObject:[NSNumber numberWithInt:0] atIndex:i]; 
}