Objective-C (4) 配列・セット・辞書

  • 配列:NSArray変更不可、NSMutableArray変更可能
  • セット:重複データのない集合、集合計算が容易に行える
  • 辞書:キーと値のペアデータ構造、連想配列とも言える

高速列挙 (for-inループ)

配列にもセットにも使える

for (NSString * city in cities){
    NSLog(@"%@", test);
}

NSArray 固定配列

  • 配列が扱うのが引用型のみ、なのでデータ型を挿入する場合も@を使用
  • 取り出したデータも引用型で、直接データ型変数に値設定できない

配列の宣言・初期化・インデックス引用

NSArray * city = @[@"Tokyo", @"Osaka", @"Nagoya"];
NSLog(@"%@", city[1]);
//Osaka
NSLog(@"%@", [city lastObject]);
//Nagoya

int a = 50;
NSArray * numbers = @[@10, @20, @30, @(a)];
//数値はデータ型ですが、@を付ける
//変数のばい、@(変数名)で引用
int v = [numbers[1] intValue];
//データ型に変更してから値設定、小数点のある数字はfloatValue

検索 indexOfObjectメソッド

戻り値:
見つかった場合、位置
見つからなかった場合、NSNotFound

NSUInteger index = [city indexOfObject:@"Fukuoka"];
レガシーシンタックス:最後にnilが必要です。

NSArray * city = [NSArray arrayWithObjects: @"Tokyo", @"Osaka", @"Nagoya", nil];

NSMutableArray 可変配列

宣言・初期化

NSMutableArray * city = [NSMutableArray array];
//空配列の宣言

NSMutableArray * city = [NSMutableArray arrayWithArray:@[@"Tokyo", @"Osaka"]];
//宣言および初期化、あるいは他の配列を代入して初期化
NSMutableArray * city = [NSMutableArray arrayWithArray:cities];

追加・挿入・削除

[city addObject:@"Nagoya"];
//一つ追加
[city addObjectsFromArray:@[@"Nagoya", @"Fukuoka"]];
//配列で複数追加
[city insertObject:@"Nagoya" atIndex:1];
//挿入
[city removeObject:@"Nagoya"];
//指定削除
[city removeObjectAtIndex:1];
//位置指定で削除

セット NSSet NSMutableSet

宣言・初期化

NSSet * citySet = [NSSet setWithArray:city];
NSMutableSet * citySet = [NSMutableSet setWithArray:city];
//宣言及び初期化

NSArray * city = @[@"Tokyo", @"Osaka", @"Nagoya", @"Nagoya"];
NSMutableSet * citySet = [NSMutableSet setWithArray:city];
//citySet : Tokyo, Osaka, Nagoya
//Nagoyaが二つあって、重複できないため、一つが除かれる

NSArray * city = [citySet allObjects];
//allObjectsメソッド:セットから配列に変換

集合計算

NSMutableSet set1 : A , B , C
NSMutableSet set2 : C , D , E
NSSet set0 : A , B , C , D

和 unionSet (set1 ∪ set2)

[set1 unionSet:set2]
// ABCDE

積 intersectSet (set1 ∩ set2)

[set1 intersectSet:set2]
// C

差 minusSet(set1 – set2)

[set1 minusSet:set2]
// AB

属する isSubsetOfSet (set1∈set0)

NSLog(@"%d", [set1 isSubsetOfSet:set0])
// 「1」が出力,YES

辞書

配列・セットと同様、固定(NSDictionary)と可変(NSMutableDictionary)がある

固定辞書

宣言・初期化

NSDictionary * capital = @{@"米国":@"NY", @"日本":@"東京", @"フランス":@"パリ"};

引用

capital[@"日本"];  //=>@"東京"

可変辞書

宣言・初期化

NSMutableDictionary * capital = [NSMutableDictionary dictionaryWithCapacity:3];
//容量が指定されたが、超えても大丈夫です。エラーにはなりません。

追加・変更

capital[@"日本"] = @"大阪";
//初回の定義は追加
capital[@"日本"] = @"東京";
//二回目からは変更

[capital setValue:@"東京" forKey:@"日本"];
//setValue: forKey:メソッドで追加・変更

削除・クリア(全削除)

[capital removeObjectForKey:@"日本"];
// @"日本"をキーとしたペアを削除

[capital removeAllObjects];
// 全削除

一括出力

配列・セット・辞書もオブジェクトなので、NSLogの%@で出力することもできる。
便利に配列の値をチェックできます。

NSArray * city = @[@"Tokyo", @"Osaka", @"Nagoya"];
NSLog(@"%@", city);

出力結果:

(
    Tokyo,
    Osaka,
    Nagoya
)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>