OC学习之--字典&集合

一.字典

    字典用于保存具有映射关系(key-value对)数据的集合.

    特点:与数组不同, 字典靠key存取元素

            key不能重复, value必须是对象.

            键值对在字典中是无序存储的

            字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary)

    1.不可变字典(NSDictionary)

        字典一旦创建,键值对就不可以更改, 不可添加,不可删除.

        仅能读取key或者value.

        1).  创建&初始化

//使用遍历构造器创建和初始化
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//使用init创建和初始化
NSDictionary *dic1 = [NSDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];

        2). 通过key获取value

//输出sex所对应的value
NSLog(@"%@", [dic objectForKey:@"sex"]);

        3). 获取所有key, 获取所有value

for (NSInteger i = 0; i < dic.allKeys.count; i ++) {
    //先通过下标获取key
    NSString *key = [dic.allKeys objectAtIndex:i];
    //再通过key获取value
    NSLog(@"%@", [dic objectForKey:key]);
}

    2. 可变字典(NSMutableDictionary)

        NSDictionary的子类,可以使用父类方法

        可以对管理的键值对进行增删改.

        1). 创建&初始化

//使用遍历构造器创建和初始化
NSMutableDictionary *mdic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//使用init创建和初始化
NSMutableDictionary *mdic1 = [NSMutableDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//创建空得可变字典
NSMutableDictionary *mdic2 = [NSMutableDictionary dictionary];

         2).添加&修改

//找到key值时修改,找不到的时候添加
[mdic setObject:@"王宁" forKey:@"name"];
[mdic setObject:@"男" forKey:@"sex"];
[mdic setObject:@"瑜伽" forKey:@"hobby"];


 NSLog(@"%@", [mdic objectForKey:@"name"]);

        3). 删除 removeObjectForKey

//删除了sex的键值对
[mdic removeObjectForKey:@"sex"];

         4).遍历字典

for (NSInteger i = 0; i < mdic.allKeys.count; i ++)
{
    NSString *key = [mdic.allKeys objectAtIndex:i];
    NSLog(@"%@", [mdic objectForKey:key]);
}
//其中, mdic.allKeys 是获取所有的键值key

二. 集合

    与数学中的集合一样,集合中的元素唯一.

    存储的元素是无序的

    存储元素必须是对象类型

    iOS中用Set表示集合,分NSSet和NSMutableSet

    1. 不可变集合

        1). 创建&初始化

        注意:集合注重的操作方式是判断是否包含,判断交集并集等

                集合中的元素具有唯一性,若重复保留一个.

NSSet *set = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil];
//个数
NSLog(@"%ld", set.count);
//获取任意一个元素值
NSLog(@"%@", [set anyObject]);
//判断是否包含某个元素
NSLog(@"%@", [set containsObject:@"1"]);

        2. 可变集合

            1).创建&初始化

 //可变集合
        NSMutableSet *mset = [NSMutableSet setWithObjects:@"1", @"2", @"3", @"4", nil];
        NSMutableSet *mset1 = [NSMutableSet setWithObjects: @"2", @"3", @"4",@"5", nil];

            2).基本操作

         //合并
        [mset unionSet:mset1];
        //交集
        [mset intersectSet:mset1];
        //添加
        [mset addObject:@"9"];   
        //删除
        [mset removeObject:@"4"];

              3).个数问题

   //可以判断重复元素个数
        NSCountedSet *cset = [NSCountedSet setWithObjects:@"1", @"2", @"2", @"4", nil];
        //元素个数
        NSLog(@"%ld", cset.count);
        //重复元素个数
        NSLog(@"%ld", [cset countForObject:@"2"]);

三.快速枚举

       1.定义

for (<#type *object#> in <#collection#>) {}
//1、object是遍历得到的元素对象。
  2、collection是集合类型的对象:数组、字典、集合。

        2.特点

            数组枚举得到数组中的元素对象。

            字典枚举得到字典中的key值。

            集合枚举得到集合中的元素对象。

        3. 快速枚举数组

 NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"2", @"4", nil];
  //遍历打印
  for (NSInteger i = 0; i < arr.count; i ++) {
       NSLog(@"%@", [arr objectAtIndex:i]);
  }
  //快速枚举
  for (NSString *str in arr) {
            NSLog(@"%@", str);
   }

          4.快速枚举字典

NSDictionary *dic111 = [NSDictionary dictionaryWithObjectsAndKeys:@"王宁", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
        //collection是集合类型的对象:数组,字典,集合.
        
        //遍历字典得到的是key
        for (NSString *key in dic111) {
            NSLog(@"%@", [dic111 objectForKey:key]);
        }

           5.快速枚举集合

//注意!!!快速枚举 - 不要在forin中改变被遍历的collection
        NSSet *set1 = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil];
        for (NSString *str in set1) {
            NSLog(@"%@", str);
        }

四.数组快速排序

    1.可变数组

        //可变数组排序
        NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"a", @"d", @"c", @"b", nil];
        //遍历
        [arr1 sortUsingSelector:@selector(compare:)];
        //输出
          for (NSInteger i = 0; i < arr1.count; i ++) {
            NSLog(@"%@", [arr1 objectAtIndex:i]);
        }

    2.不可变数组

  NSArray *arr11 = [NSArray arrayWithObjects:@"1", @"4", @"2", @"3", nil];
   NSArray *sortArr = [arr11 sortedArrayUsingSelector:@selector(compare:)];
  //输出
   for (NSInteger i = 0; i < sortArr.count; i ++) {
       NSLog(@"%@", [sortArr objectAtIndex:i]);
   }





你可能感兴趣的:(NSDictionary,快速枚举,NSSet,NSMutableSet)