Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

NSMutableIndexSetクラス

INDEX>Foundation>

apple(mac)
apple(iOS)

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 2.0以降
定義 NSIndexSet.h

概要

変更可能な重複しない整数値のコレクションクラスです。常にソートされた状態にあります。
NSArray-objectsAtIndexesメソッドなどで使用します。
このクラスはNSMutableSetと名前が似ていますがNSMutableSetのサブクラスではありません。
このクラスをサブクラス化してはいけません。

作成

親クラスであるNSIndexSetのメソッド(+ indexSet)で作成するか、allocで作成した後に親クラスであるNSIndexSetのinitから始まる初期化メソッドで初期化します。

NSMutableIndexSet *aSet = [NSMutableIndexSet indexSet];

インデックスの追加

レシーバーに一つインデックスを追加する場合には(– addIndex)メソッドを使います。インデックスセットを使って追加する場合には(– addIndexes)メソッドを使います。範囲をしていてインデックスを追加する場合には(– addIndexesInRange)メソッドを使用します。

#pragma mark NSIndexSet addIndexes
-(void)method002
{
    NSMutableIndexSet *aSet = [NSMutableIndexSet indexSet];
    
    [aSet addIndex:1];
    [aSet addIndex:3];
    [aSet addIndex:5];
    [aSet addIndex:7];
    [aSet addIndex:9];
    [aSet addIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(8,10)]];
    [aSet addIndexesInRange:NSMakeRange(20, 3)];
    NSLog(@"%s %@",__FUNCTION__, [aSet description]);
    //=><NSMutableIndexSet: 0x6869580>[number of indexes: 17 (in 5 ranges), indexes: (1 3 5 7-17 20-22)]
}

インデックスの除去

レシーバから一つインデックスを除去するには(– removeIndex)メソッドを使用します。インデックスセットを使って複数のインデックスを除去するには(– removeIndexes)メソッドを使います。範囲を指定してインデックスを除去するには(– removeIndexesInRange)メソッドを使用します。全てのインデックスを除去するには(– removeAllIndexes)メソッドを使用します。

インデックスの除去

#pragma mark NSIndexSet removeIndexes
-(void)method005
{
    
    NSMutableIndexSet *aSet = [NSMutableIndexSet indexSet];
    
    [aSet addIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,50)]];
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(10,10)];
    [aSet removeIndexes:indexSet];
    NSLog(@"%s %@",__FUNCTION__, [aSet description]);
    //=><NSMutableIndexSet: 0x6852f80>[number of indexes: 40 (in 2 ranges), indexes: (1-9 20-50)]
}

インデックスグループのシフト

指定したインデックス以降のグループ全体を移動します。移動値は負の数値でも可能です。
– shiftIndexesStartingAtIndex:by

#pragma mark NSIndexSet removeIndexes
-(void)method006
{
    
    NSMutableIndexSet *aSet = [NSMutableIndexSet indexSet];
    [aSet addIndex:1];
    [aSet addIndex:3];
    [aSet addIndex:5];
    [aSet addIndex:7];
    [aSet addIndex:9];
    
    NSLog(@"%s %@",__FUNCTION__, [aSet description]);
    //=><NSMutableIndexSet: 0x6880a00>[number of indexes: 5 (in 5 ranges), indexes: (1 3 5 7 9)]

    [aSet shiftIndexesStartingAtIndex:5 by:10];
    NSLog(@"%s %@",__FUNCTION__, [aSet description]);
    //=><NSMutableIndexSet: 0x6852f80>[number of indexes: 40 (in 2 ranges), indexes: (1-9 20-50)]
}

適合するプロトコル

メソッド

インデックスグループの移動

– shiftIndexesStartingAtIndex:by