NSDictionary,NSMutableDictionary,NSMutableDictionary,NSMutableSet)はjavaのmap,setに相当する

8330 ワード

1 NSDictionaryとNSMutableDictionary 
NSDictionary  :Javaのmapです.オブジェクトを挿入するにはキー値対key-value , 同様に同じ原則を堅持して、対象を入れるしかなくて、本体を増やして削除してはいけません;
(1)初期化方法
  • + dictionaryWithObject:forKey:
  • + dictionaryWithObjects:forKeys:
  • + dictionaryWithObjectsAndKeys:

  • この3つが一番よく使われるのでしょうが、注意は対象が前、keyが後です
    2 keyとvalueへのアクセス
    Accessing Keys and Values
  • – allKeys
  • – allKeysForObject:
  • – allValues
  • – objectForKey:

  • すべてのキーを返します allValueはすべてのvalueを返します
  • – allKeysForObject:
  • NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"man1",@"11",@"wom",@"22",@"kid",@"33",@"man1",@"44",nil]; NSArray *array = [dic2 allKeysForObject:@"man1"]; NSLog(@"%@",array);
    上のコードから分かるように、allKeysForObjectは、指定されたオブジェクトのすべてのこのオブジェクトとペアを返すkeyである(辞書またはjavaのmap keyは唯一であるがvalueではない).          3列挙辞書       Enumerating Dictionaries
  • – keyEnumerator
  • – objectEnumerator
  • – enumerateKeysAndObjectsUsingBlock:
  • e n u m e r ateKeysAndObjectsWithOptions:usingBlock:以上の方法は主にこの辞書の値を取得することであり、forに相当するだろうがforより効率が高い.結局公式パッケージの方法
  • NSDictionary *nsd = [NSDictionary dictionaryWithObjectsAndKeys:@"   ",@"1",@"  ",@"2",@"   ",@"3", nil]; [nsd enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@" ,key,obj); }];
    NSEnumerator *en = [nsd keyEnumerator];
        id string; while (string = [en nextObject]) { NSLog(@"%@-%@",string,[nsd objectForKey:string]); }
    先述– keyEnumerator – objectEnumeratorこれは辞書のすべてのkeyまたはobjectを取得します. NSEnumeratorタイプのこのタイプは1つの方法しかありませんnextObjectオブジェクトはチェーンテーブルでオブジェクトを保存して1つずつ読むようにしていると思います.   
  • – enumerateKeysAndObjectsUsingBlock:
  • e n u m e r ateKeysAndObjectsWithOptions:usingBlock:そしてこの2つは実は同じですが、2つ目は1つ目より1つ少ないパラメータNSSortOptionsです.これは列挙値です.KEYの順序を設定する役割を果たします(NSSortConcurrentは正の順序で、NSSortStableは逆の順序です).  enum {    NSSortConcurrent = (1UL << 0),    NSSortStable = (1UL << 4), };

  •   (ここで疑問がありますが、辞書の保存は無秩序ではありませんか.どうして正反対に分かれているのか、後で考えてみると、同じ方法やこの辞書のライフサイクルで確定するためかもしれません.結局、この辞書が作成された後、キー値のペアはある順序で存在しています).NSMutableDictionary同様に可変辞書でjavaのmapとほぼ同じです  Creating and Initializing a Mutable Dictionary
  • + dictionaryWithCapacity:
  • – initWithCapacity:
  • + dictionaryWithSharedKeySet:

  • Adding Entries to a Mutable Dictionary
  • – setObject:forKey:
  • – setObject:forKeyedSubscript:
  • – setValue:forKey:
  • – addEntriesFromDictionary:
  • – setDictionary:

  • Removing Entries From a Mutable Dictionary
  • – removeObjectForKey:
  • – removeAllObjects
  • – removeObjectsForKeys:

  • 上のいくつかの方法は何も言うことはありません.アップルの命名メカニズムがいいと言わざるを得ません.    2  NSSet  および NSMutableSet NSSetは唯一の値しか格納できない集合で、OCではどう実現されているのか分かりませんが、javaはhashコードを判断しています.ocも悪くないと思います.同じように作成しても変更できません. 
  • – allObjects
  • – anyObject
  • – containsObject:

  • これらは中のオブジェクトを取得する最初のオブジェクトがすべて取得され、2番目のオブジェクトがランダムに取得されます(ランダムといえば最初ですが、  ただしsetはランダムに格納されているので、ランダムと理解できますが、同じライフサイクルで取得された値は同じです)コードを参照してください!
      NSSet *set = [NSSet setWithObjects:@"123",@"456",@"789", nil]; NSArray *ns = [set allObjects]; id na = [set anyObject]; BOOL a = [set containsObject:@"123"]; NSLog(@"%@,%@,%d",ns,na,a);
      出力は2013-08-08 20:45:01.846 NSSetAndNSDic[1886:303]( 123, 456, 789 ),123,1あるオブジェクトが含まれているかどうかを判断するもう一つの方法  – member:    
    NSString *b = [set member:@"456"]; NSLog(@"%@",b);
    これが私が重要だと思ういくつかの残りの見名知意です.    NSMutableSet
     
  • – unionSet:
  • – minusSet:

  • 1つ目は2つのsetを融合させ、2つ目は2つのセットの同じものを削除することです. 
    NSMutableSet *set = [NSMutableSet setWithObjects:@"123",@"456",@"789", nil]; NSMutableSet *set2 = [NSMutableSet setWithObjects:@"abc",@"def",@"hij", nil]; NSMutableSet *set3 = [NSMutableSet setWithObjects:@"hjk",@"789", nil]; [set unionSet:set2]; NSLog(@"%@",set); [set minusSet:set2]; NSLog(@"%@",set); [set minusSet:set3]; NSLog(@"%@",set);

    出力:
    2013-08-08 21:00:59.885 NSSetAndNSDic[1920:303] {( 
    123, 
    789, 
    abc, 
    hij, 
    456, 
    def 
    )} 
    2013-08-08 21:00:59.887 NSSetAndNSDic[1920:303] {( 
    123, 
    789, 
    456 
    )} 
    2013-08-08 21:00:59.887 NSSetAndNSDic[1920:303] {( 
    123, 
    456 
    )} 
    補足:
    もう一つのfor inの使い方はjavaの超強サイクルfor eachのようなものだと思います
    arraysetなら Dictionaryでも使えます
    NSDictionary *nsd2 = [NSDictionary dictionaryWithObjectsAndKeys:@"   ",@"1",@"  ",@"2",@"   ",@"3", nil]; for (id key in nsd2) { NSLog(@"%@",[nsd objectForKey:key]); }

    何も言うことはありませんが、この簡単な使い方があることを知っています.forと同じです.