当前位置: 首页 > news >正文

objective-c系列-NSDictionaryNSMutableDictionary

*********************************************

NSDictionary

*********************************************

// 字典的概念:

//     键值对的概念:

//    查字典时:  用一个键,得到一个值

 字典的构造方法:

    NSDictionary * dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3"nil];

    NSLog(@"dict1: %@", dict1);

    

    //  字典的字面常量对象:

    //   1,  1,3, "abc", @"abc", @[@"abc",@""]  @{@"key":@"value",@"k2":@"v2"}

    

//    NSDictionary * dict2 = @{@"1":@"one",@"2":@"two",@"3":@"three"};

#define DICT @{@"1":@"one",@"2":@"two",@"3":@"three"}

    NSDictionary * dict2 = DICT;//DICT是一个宏

    NSLog(@"dict2: %@",dict2);

    

    NSDictionary * dict3 = [[ NSDictionary alloc]initWithDictionary:dict2];

    

    NSLog(@"dict3: %@", dict3);

    

    NSArray * keys =@[@"key1",@"key2",@"key3"];

    NSArray * values =@[@"value1",@"value2",@"value3"];

    NSDictionary * dict4 = [[ NSDictionary alloc]initWithObjects:values forKeys:keys];

    NSLog(@"dict4: %@", dict4);

*********************************************

//根据键查值

    NSDictionary * dict1 = @{@"1":@"one",@"2":@"two",@"3":@"three"};

    

    NSString * key = @"1";

    

    // 根据一个键,得到一个值,如果字典中没有这个键值对,则objectForKey:这个方法返回一个nil

    NSString *value = [dict1 objectForKey:key];

    NSString *value2 = dict1[key];

    NSString *value3 = dict1[@"2"];

    //从终端获取一个key,得到一个值

    char buf[128];

    //  fgets  gets的区别:

    //   gets:从终端的输入缓冲区不断地获取字符存入buf,直到遇到回车符结束,

    //         但是最后的那个回车符不会存入buf,只会往buf后边补一个'\0'

    //    ->  abc\n    buf: abc\0

    

    //   fgets(buf, 122, stdin): 从终端的输入缓冲区不断地获取字符,但最多只能获取122个字符,如果不够122个字符时就遇到了回车符,那么回车符也

    //  会放入buf, 且在回车符后边再补一个'\0'

    //    ->  abc\n    buf:  abc\n\0

    

    while (1) {

        NSLog(@"请输入一个key");

#if 0

        

        fgets(buf, 122, stdin);

        buf[strlen(buf)-1]='\0';

#else

        gets(buf);

#endif

        NSString *inputKey = [NSString stringWithUTF8String:buf];

        NSString * getValue = [dict1 objectForKey:inputKey];

        NSLog(@"值为: %@", getValue);

    }

*********************************************

//遍历字典

    NSDictionary * dict1 = @{@"33":@"three",@"1":@"one",@"2":@"two",@"3":@"three"};

    

    //              获取字典所有的键

    NSArray *keys=[dict1 allKeys];

    //              获取字典所有的值

    NSArray *values = [dict1 allValues];

    id key;

    //快速遍历字典的所有键

    for(key in dict1)

    {

        NSLog(@"key: %@",key);

        NSLog(@"value: %@", dict1[key]);

    }

    //注意从字典获取的枚举器枚举的是字典的所有值,而不是键

    NSEnumerator *enumerator = [dict1 objectEnumerator];

    id obj;

    while (obj=[enumerator nextObject])

    {

        NSLog(@"obj: %@", obj);

        //注意:词典中:值可以相同,但键不能相同,即一个值可以有多个键

        NSArray * keysOfObj= [dict1 allKeysForObject:obj];

        NSLog(@"某个值对应的所有键为:%@",keysOfObj);

    }

*********************************************

// 其他方法:

    //1, 获取字典的键值对数量

    NSDictionary * dict1 = DICT;

    NSUInteger  count = [dict1 count];

    NSLog(@"字典一共有%lu个键值对", count);

*********************************************

*********************************************

NSMutableDictionary

*********************************************

可变字典的构造方法:

    //构造一个空字典

NSMutableDictionary *mdict = [NSMutableDictionary dictionary];

    NSMutableDictionary *mdict1=[[NSMutableDictionary alloc]init];

    NSMutableDictionary * mdict2 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2"nil];

    NSMutableDictionary * mdict3 = [[ NSMutableDictionary alloc]initWithObjects:@[@"vx1",@"vx2",@"vx3"] forKeys:@[@"kx1",@"kx2",@"kx3"]];

*********************************************

添加键值对:

    NSMutableDictionary *mdict1=[[NSMutableDictionary alloc]init];    

    [mdict1 setObject:@"setV1" forKey:@"setK1"];

    [mdict1 setObject:@"setV1" forKey:@"setK2"];

    NSLog(@"mdict1: %@", mdict1);

    NSLog(@"两个值的地址分别为:%p  %p", mdict1[@"setK1"], mdict1[@"setK2"]);

    

    NSLog(@"两个abc的地址分别为: %p %p"@"abc"@"abc");

*********************************************

修改键值对:

     NSMutableDictionary * mdict1 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2"nil];

    //现在时刻,mdict1  : k1=v1    k2=v2

    // 修改某一个键对应的值让键 k2的值不再是 v2

    [mdict1 setObject:@"this is newValue for k2" forKey:@"k2"];

     NSLog(@"mdict1: %@", mdict1);

*********************************************

删除键值对:

    NSMutableDictionary * mdict2 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3"@"v5",@"k5",@"v6",@"k6",nil];

    NSLog(@"原始字典: mdict2: %@", mdict2);

    //删除一个键值对,需要传入一个键

    [mdict2 removeObjectForKey:@"k2"];

    NSLog(@"删除一个键对应的键值对后:mdict2: %@", mdict2);

 

    //删除一组键对应的键值对, 传入一个键的数组

    [mdict2 removeObjectsForKeys:@[@"k5",@"k6"]];

    NSLog(@"删除一组键对应的键值对后:mdict2: %@", mdict2);

    

    //重置字典,即原来的所有键值对无效了。

    [mdict2 setDictionary:@{@"newKey1":@"newValue1",@"newKey2":@"newValue2"}];

    //删除所有键值对

    [mdict2 removeAllObjects];

    NSLog(@"删除所有键值对后:mdict2: %@", mdict2);

*********************************************

*********************************************

*********************************************

转载于:https://www.cnblogs.com/hyuganatsu/p/NSDictionary.html

相关文章:

  • 盘点最实用56个大数据可视化分析工具
  • 需求工程-软件需求模式读书笔记1
  • checkbox的readonly不起作用的解决方案
  • 打造基金业大数据监管体系 私募基金服务业务增至七类
  • 如何在微信订阅号里实现oauth授权登录
  • LinkedIn 推出在线学习门户网站 LinkedIn Learning
  • C语言经典编程题一
  • STT GDC公司完成塔塔公司在新加坡三个数据中心的资产收购
  • Java RandomAccessFile用法
  • 做好数据挖掘模型的9条经验总结
  • 数值特征
  • 智慧城市是方法而非目标
  • 在 Linux 中用 nmcli 命令绑定多块网卡
  • 移动端手指左右滑动切换内容demo
  • 聚焦电信诈骗:大数据时代 谁来捍卫个人信息安全?
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【React系列】如何构建React应用程序
  • 0基础学习移动端适配
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Create React App 使用
  • create-react-app做的留言板
  • Docker下部署自己的LNMP工作环境
  • emacs初体验
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS基础之数据类型、对象、原型、原型链、继承
  • miaov-React 最佳入门
  • mysql外键的使用
  • text-decoration与color属性
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 多线程事务回滚
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于Java中分层中遇到的一些问题
  • 区块链分支循环
  • 使用docker-compose进行多节点部署
  • 新手搭建网站的主要流程
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 阿里云移动端播放器高级功能介绍
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (+4)2.2UML建模图
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (4)Elastix图像配准:3D图像
  • (4)事件处理——(7)简单事件(Simple events)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (二)c52学习之旅-简单了解单片机
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (一) springboot详细介绍
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .Net 4.0并行库实用性演练
  • .net core 6 集成和使用 mongodb
  • .net知识和学习方法系列(二十一)CLR-枚举