辞書と集合のクラス (4/7)
作成:2011-02-18 09:47
更新:2011-11-13 21:08
更新:2011-11-13 21:08
■NSSetは「集合」のクラス
多数の値を保管するクラスは、他にもまだあります。それは「NSSet」と「NSMutableSet」というクラスです。これらは何かというと、「集合」を扱うためのクラスなのです。
集合というのは、数学(算数?)に出てきた、あの集合のことです。多数のデータをグループとしてまとめる、あれですね。「プログラミングの世界で、集合ってどういう意味があるんだ?」と思うかも知れません。他の配列や辞書と何が違うんだ?と感じるでしょう。
集合は、「ユニークな値が、順不同でひとまとめにされたもの」といえます。NSArrayのように順番をつけて値は管理されません。またNSDictionaryのように同じ値をいくつでも保管できるということもありません。1つのデータは常に1つのみ。同じデータをいくつも保管することは出来ないのです。前に説明した「ユニーク」ということですね。
このNSSetには、コンビニエンスコンストラクタがいろいろと用意されています。主なものを以下に整理しておきましょう。
この他、NSSetではデータを追加するメソッドがいくつか用意されています。NSSet自体はデータの変更はできませんが、例によって「データを追加したNSSetインスタンスを新たに作って返す」というメソッドを用意することで、実質的にデータの追加が可能になっています。
では、簡単な利用例をあげておきましょう。setWithObjects:を使ってインスタンスを作成した後、setByAddingObject:でデータを追加しています。
今回は、わざと既にある@"taro"を更に追加してみました。が、実際にNSLogで出力されるNSSetの中身を見ると、@"taro"は1つだけしかありません。NSSetが「ユニークな値を管理する集合クラス」であることが、なんとなくわかりますね?
集合というのは、数学(算数?)に出てきた、あの集合のことです。多数のデータをグループとしてまとめる、あれですね。「プログラミングの世界で、集合ってどういう意味があるんだ?」と思うかも知れません。他の配列や辞書と何が違うんだ?と感じるでしょう。
集合は、「ユニークな値が、順不同でひとまとめにされたもの」といえます。NSArrayのように順番をつけて値は管理されません。またNSDictionaryのように同じ値をいくつでも保管できるということもありません。1つのデータは常に1つのみ。同じデータをいくつも保管することは出来ないのです。前に説明した「ユニーク」ということですね。
このNSSetには、コンビニエンスコンストラクタがいろいろと用意されています。主なものを以下に整理しておきましょう。
NSSet *変数 = [NSSet set];単純ですね。setは、空のインスタンスを作成するものです。setWithArray:は、引数に指定したNSArrayのデータを持ったNSSetインスタンスを作成します。
NSSet *変数 = [NSSet setWithArray:《NSArray*》];
NSSet *変数 = [NSSet setWithObject:《id》];この2つは、保管するオブジェクトを引数に指定してインスタンスを作成するためのものです。setWithObject:は、引数のオブジェクト1つを持ったNSSetを作成します。setWithObjects:のほうは、保管しておくオブジェクトを引数に、カンマで区切っていくつでも指定することができます。
NSSet *変数 = [NSSet setWithObjects:《id》,《id》, ……];
この他、NSSetではデータを追加するメソッドがいくつか用意されています。NSSet自体はデータの変更はできませんが、例によって「データを追加したNSSetインスタンスを新たに作って返す」というメソッドを用意することで、実質的にデータの追加が可能になっています。
NSSet *変数 = [《NSSet*》 setByAddingObject:《id》];単純にオブジェクトを追加するだけなら、setByAddingObject:で十分でしょう。後の2つは、NSSetやNSArrayのデータをまとめて追加するものです。これらを呼び出して、新たに生成されたインスタンスを変数などに再設定して使えばいいわけです。
NSSet *変数 = [《NSSet*》 setByAddingObjectsFromSet:《NSSet*》];
NSSet *変数 = [《NSSet*》 setByAddingObjectsFromArray:《NSArray*》];
では、簡単な利用例をあげておきましょう。setWithObjects:を使ってインスタンスを作成した後、setByAddingObject:でデータを追加しています。
今回は、わざと既にある@"taro"を更に追加してみました。が、実際にNSLogで出力されるNSSetの中身を見ると、@"taro"は1つだけしかありません。NSSetが「ユニークな値を管理する集合クラス」であることが、なんとなくわかりますね?
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSSet* set = [NSSet setWithObjects: @"tuyano",@"taro",nil]; set = [set setByAddingObject:@"hanako"]; set = [set setByAddingObject:@"taro"]; NSLog(@"%@",set); } return 0; }
※関連コンテンツ
「初心者のためのObjective-Cプログラミング入門」に戻る