NSIndexSet の値を取得・設定する : Objective-C プログラミング

PROGRAM


NSIndexSet の値を取得・設定する

Objective-C には、整数値を複数保持できる NSIndexSet というクラスがあります。

あくまでも "インデックスセット" なので、同じ値を重複して持つことができなかったり、勝手に並び替えられてしまうという性質はありますが、それで問題ない場面では、複数の整数をオブジェクト型でやりとりしたい場面で重宝しそうです。

 

ちなみに NSIndexSet で保持できる整数は NSUInteger 型です。

他の数値をオブジェクトとして扱う方法としては NSNumber クラスを使用する方法があります。こらの場合は、単一の数値しか持てませんが、小数点数や BOOL 型などの値も、オブジェクトに変換して扱うことが可能です。

 

ここでは、NSIndexSet に値を設定する方法と、NSIndexSet に格納されている値を取得する方法について見て行きます。

NSIndexSet に値を設定する

NSIndexSet に値を設定するには、NSMutableIndexSet クラスを使用します。

たとえば 1, 3, 5, 10 という値を NSIndexSet に格納したい場合には次のようにします。

// 書き込み可能なインデックスセットのインスタンスを生成します。

NSMutableIndexSet* indexes = [[NSMutableIndexSet alloc] init];

 

// インデックスセットに値を設定します。

[indexes addIndex:1];

[indexes addIndex:3];

[indexes addIndex:5];

[indexes addIndex:10];

 

// これ以上、書き込んで欲しくないような場合は、読み取り専用のインデックスセットに移すのも有りかもしれません。

NSIndexSet* result = [[NSIndexSet allooc] initWithIndexSet:indexes];

このようにすることで、インデックスセットを作成することができました。

NSIndexSet から値を取得する

NSIndexSet から値を取得する場合は、少し複雑な操作になります。

流れとしては、まず最初のインデックス値を取得して、その値よりも大きなインデックス値を順番に取得して行く流れになります。

そして、あるインデックス値よりも大きい値が存在しなくなった時点で、最後まで取得できたことにします。

 

これをプログラムで書くと、次のようになります。

NSUInteger indexValue;

 

// 最初のインデックス値を取得します。

indexValue = indexes.firstIndex;

 

// ここから、最後の値を取得し終えるまで、繰り返し値を取得して行きます。

while (indexValue != NSNotFound)

{

// ここで取得したインデックス値に対する処理を行います。

 

 

// 取得したインデックス値をもとに、その次のインデックス値を取得します。

indexValue = [indexes indexGreaterThanIndex:indexValue];

}

このようにすることで、NSIndexSet に格納した値を取得することができました。

[ もどる ]