字典集合


//一,字典--NSDictionary   key键找到唯一的value 值
        
//      特点:1,只能存对象
//           2,字典是无序的
//           3,key 值不可以重复  (如果重复,保留前面的键值对)
//           4, value 值 可以重复
//           5, key 值 和 value 值 必须是对象
//           6, 一般情况下,key值只使用字符串
//        
//         NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"小明",@"小明对应男生",
//                                                                         @"小翠",@"小翠对应女生", nil];
//        NSLog(@"%@",dict);
//        NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"小明",@"对应哥哥",
//                                                                         @"小翠",@"对应妹妹", nil];
//        NSLog(@"%@",dict1);
//        
//        //只能写一个键值对,不常用
//        NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"];
//        NSLog(@"%@",dict2);
//        //语法糖
//        NSDictionary *dict3 = @{@"key1": @"value1",
//                                @"key2": @"value2",
//                                @"key3": @"value3",
//                                @"key4": @"value2"};
//        NSLog(@"%@",dict3);
//        
//        
//        
////字典的操作方法  (前面四个很重要)
////      1,cout
//        NSUInteger dictCount = [dict3 count];
//        NSLog(@"%lu",dictCount);
////      2, 拿出字典所有的 key 值
//        NSArray *keys = [dict3 allKeys];
//        NSLog(@"dict3里面的所有的 key 为 %@",keys);
////      3, 拿出字典里面所有的 value 值
//        NSArray *values = [dict3 allValues];
//        NSLog(@"dict3里面的所有的 value 为 %@",values);
//
//        Person *person1 = [[Person alloc]initWithName:@"gxm"];
//        Person *person2 = [[Person alloc]initWithName:@"lh"];
//        NSDictionary *finalDic = @{@"key1": person1,@"key2":person2};
//        NSLog(@"%@",finalDic);
////      4, 拿出某一个 value 值
//        [dict3 objectForKey:@"key1"];
//        // 语法糖去实现
//         NSString *value = dict3[@"key2"];
//         NSLog(@"aaaa%@",value);
//        NSLog(@"%@",dict3[@"key2"]);
////      5, 根据 value 拿出某些个 key 值(这个方法不常用)
//        NSArray *keysArray = [dict3 allKeysForObject:@"value2"];
//        NSLog(@"bbbb%@",keysArray);
//      //6,遍历字典
////        for (id object in dict3) {  //打印出 key 值
////            NSLog(@"12%@",object);
////        }
////        for (id object in dict3) {   //通过 key 值找出 value 值
////            NSLog(@"21%@",dict3[object]);
////        }
//        NSArray *keysArray1 = [dict3 allKeys];
//        for (NSString *key in keysArray1) {
//            NSLog(@"11111%@",key);
//        }
//    NSLog(@"1111%@",keysArray1);
//        
////  字典的其他使用
////        1,数组和字典可以相互嵌套
////        2,如果字典里面放数组,一般情况把数组作为 value 值
////        
//
//        
////二,  NSMutableDictionary  可变的字典 -----------继承不可变的字典
//        // 特点:key 值如果重复,保留后面的键值对
//        //NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc]initWithCapacity:10];
//        NSMutableDictionary *mutableDic1 = [NSMutableDictionary dictionary];
//        //NSLog(@"%@",mutableDic);
////       1,往可变的字典里面去添加元素
//        [mutableDic1 setObject:person1 forKey:@"key1"];
//        [mutableDic1 setObject:person2 forKey:@"key2"];
//        [mutableDic1 setObject:@"value" forKey:@"key1"];
//        NSLog(@"AAAA%@",mutableDic1);
////       2,删除字典里面的元素
//// 删除字典里面的所有元素
//        //[mutableDic1 removeAllObjects];
//        //NSLog(@"%@",mutableDic1);
//// 删除某一个值
//        [mutableDic1 removeObjectForKey:@"key1"];
//        NSLog(@"%@",mutableDic1);
////
//        
//        NSArray *deleteArray = @[@"key1",@"key2"];
//        [mutableDic1 removeObjectsForKeys:deleteArray];
//

        
        
//三 NSSet  集合
//   1,里面的只可以存对象
//   2,里面的元素不能重复
//   3,集合是无序的
//
//
//        NSSet *set = [NSSet setWithObjects:@"ni",@"hao",@"shuai",@"2", nil];
//        NSLog(@"%@",set);
//        
////   把数组里面的元素放到 set 里面 (以下三行代码用来去除重复元素)
//        NSArray *array = @[@"1",@"2",@"1"];
//        NSSet *set1 = [NSSet setWithArray:array];
//        NSLog(@"%@",set1);
//        
////  操作 NSSet 的方法
////   1,取出集合里面所有的元素
//        NSLog(@"....%@",set1.allObjects);
//        NSLog(@",,,,%lu",set1.count); //统计set中元素的个数
////   2,取出集合里面某个元素 不保证随机性
//        NSLog(@"----%@",[set1 anyObject]);
//        
////   3,交集
//    
//        NSLog(@";;;;%d", [set1 intersectsSet:set]);
//        
//        
//四 NSMutableSet  可变的集合
        NSMutableSet *set2 = [NSMutableSet setWithObjects:@"3",@"2",@"4", nil];
        NSMutableSet *set3 = [NSMutableSet setWithObjects:@"1",@"4",@"5", nil];
        
////交集
//        [set2 intersectSet:set3];
//        NSLog(@"%@", set2);
////并集
//        [set2 unionSet:set3];
//        NSLog(@"%@", set2);
//差
        [set2 minusSet:set3];
        NSLog(@"%@", set2);
//
////五    NSCountedSet 集合计数
//        
//        NSCountedSet *countSet = [NSCountedSet setWithObjects:@"1",@"3",@"1",@"6", nil];  //两个1,一个3,一个6
//        NSLog(@"%@", countSet);
//


### 基础概念 C# 中的字典(Dictionary)是一种非常强大且常用的集合类型,以键值对的形式存储数据,能够高效地实现数据的存储、检索和管理。Dictionary<TKey, TValue> 是具体的实现类,其中 `TKey` 表示键的类型,`TValue` 表示值的类型,这是一种非常高效的键值对存储结构,能提供常见的查找、插入、删除等操作,并且能够处理键值对数据。在实际开发中,需要确保键是唯一的,且注意字典不保证键值对顺序。使用自定义类型作为字典的键时,需要重写 `Equals` 和 `GetHashCode` 方法。使用 `TryGetValue` 方法可以避免因键不存在而抛出异常 [^1][^2]。 ### 声明与初始化 ```csharp // 声明一个键为 string 类型,值为 int 类型的字典,并初始化 Dictionary<string, int> dic = new Dictionary<string, int>(); ``` ### 基本操作 #### 添加数据 ```csharp Dictionary<string, int> dic = new Dictionary<string, int>(); // 向字典集合中添加数据的第一种方式 dic.Add("aa", 12); dic.Add("bb", 15); // 向字典集合中添加数据的第二种方式 dic["dd"] = 17; // 如果字典集合已经有键为 "cc" 的数据,则覆盖那个键对应的值,否则生成新的一组数据 dic["cc"] = 21; dic["cc"] = 29; ``` #### 获取数据 ```csharp // 可以根据键来获取到字典集合的值 int value = dic["bb"]; // 使用 TryGetValue 方法安全获取值,避免键不存在时抛异常 if (dic.TryGetValue("bb", out int safeValue)) { // 如果键存在,执行这里的代码 } ``` #### 删除数据 ```csharp // 根据键删除键值对 dic.Remove("aa"); ``` ### 遍历方法 ```csharp // 可以直接用 foreach 循环遍历出集合中的数据,这里必须使用 KeyValuePair foreach (KeyValuePair<string, int> item in dic) { Console.WriteLine($"键是 {item.Key},值是 {item.Value}"); } // 只遍历键 foreach (string key in dic.Keys) { Console.WriteLine($"键是 {key}"); } // 只遍历值 foreach (int value in dic.Values) { Console.WriteLine($"值是 {value}"); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值