OC之之NSDictionary/NSMutableDictionary

简介:

NSDictionary/NSMutableDictionary特点:

(1)里存储的东西都是键值对

(2)可以像数组一样快速创建(适用NSDictionary):@{key1 : value1,  key2 : value2}

(3)快速访问元素:字典名 [key]

比如可以这样为指定key赋值:

dic [@”key1”] = @”value1”;

快速获取key所对应的value

NSString *name = dic[@”name”];//存储的是String

或者:

NSDictionary *userdic = dic[@”user”];//存储的是NSDictionary

NSString *name = userdic [@”name”];

(4)字典不允许有相同的key,但允许有相同的valueObject

(5)字典是无序的

1、不可变词典NSDictionary

字典初始化:

1)以一个元素初始化

NSDictionary *dic = [NSDictionary dictionaryWithObject:numObj forKey:@"key"];

2)初始化两个元素

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:

numObj, @"valueKey", numObj2, @"value2",nil];

3)初始化新字典,新字典包含otherDic

NSDictionary *dic = [NSDictionary dictionaryWithDictionary:otherDic];

4)以文件内容初始化字典

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];

(1)也可创建多维字典

使用快速创建的方式:

NSArray *persons = @[

          @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},

    @{@"name" : @"rose", @"qq" : @"767567"},

    @{@"name" : @"jim", @"qq" : @"423423"},

    @{@"name" : @"jake", @"qq" : @"123123213"}

];

访问:

NSLog(@"%@", persons[1][@"qq"]);

上述代码含义:

先取出1位置对应的字典

再取出字典中qq这个key对应的数据

常用方法:

1)获取字典数量

NSInteger count = [dic count];

2)通过key获取对应的value对象

NSObject *valueObj = [dic objectForKey:@"key"];

3)将字典的key转成枚举对象,用于遍历

NSEnumerator *enumerator = [dic keyEnumerator];

4)获取所有键的集合

NSArray *keys = [dic allKeys];

5)获取所有值的集合

NSArray *values = [dic allValues];

2、可变数组NSMutableDictionary

1)初始化一个空的可变字典

NSMutableDictionary *dic2 = [NSMutableDictionary

dictionaryWithObjectsAndKeys:@"v1",@"key1",@"v2",@"key2",nil];

 

NSDictionary *dic3 = [NSDictionary dictionaryWithObject:

@"v3" forKey:@"key3"];

2)向字典2对象中添加整个字典对象3

[dic2 addEntriesFromDictionary:dic3];

3)向字典2对象中最佳一个新的key3value3

[dic2 setValue:@"value3" forKey:@"key3"];

4)初始化一个空的可变字典

NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];

5)将空字典1对象内容设置与字典2对象相同

[dic1 setDictionary:dic2];

6)将字典中key1对应的值删除

[dic1 removeObjectForKey@"key1"];

NSArray *array = [NSArray arrayWithObjects:@"key1", nil];

7)根据指定的数组(key)移除字典1的内容

[dic2 removeObjectsForKeys:array];

8)移除字典所有对象

[dic1 removeAllObjects];

 

3、遍历字典

1)快速枚举

for (id key in dic){

     id obj = [dic objectForKey:key];

     NSLog(@"%@", obj);

}

2)一般枚举

NSArray *keys = [dic allKeys];

inr length = [keys count];

for (int i = 0; i < lengthi++){

     id key = [keys objectAtIndex:i];

     id obj = [dic objectForKey:key];

     NSLog(@"%@", obj);

}

3)通过枚举类型枚举

NSEnumerator *enumerator = [dic keyEnumerator];

id key = [enumerator nextObject];

while (key) {

        id obj = [dic objectForKey:key];

        NSLog(@"%@", obj);

        key = [enumerator nextObject];

}


目录
相关文章
ant design pro 面包屑和多标签页
ant design pro 面包屑和多标签页
1060 0
|
机器学习/深度学习 算法 大数据
机器学习:Friedman检验与Nemenyi后续检验,Python实现
机器学习:Friedman检验与Nemenyi后续检验,Python实现
2373 0
机器学习:Friedman检验与Nemenyi后续检验,Python实现
|
安全 物联网 Linux
带你读《物联网渗透测试》之三:固件分析与漏洞利用
本书介绍物联网渗透测试的原理和实用技术。主要内容包括IOT威胁建模、固件分析及漏洞利用、嵌入式web应用漏洞、IOT移动应用漏洞、IOT设备攻击、无线电入侵、固件安全和移动安全最佳实践、硬件保护以及IOT高级漏洞的利用与安全自动化。
|
5月前
|
人工智能 前端开发 JavaScript
前端组件库——shadcn/ui知识点大全(三)
教程来源 http://lemci.cn/ shadcn/ui通过Tree Shaking、动态导入、Tailwind JIT等实现极致性能优化,Bundle仅增20–50KB;组件即代码,完全可控、可定制、易维护,契合Next.js+Tailwind现代栈与AI协作开发。
|
5月前
|
JSON 前端开发 JavaScript
基于LangChain的简易智能旅游助手Agent
本文分享基于LangChain开发的智能旅游助手Agent,支持“查天气+荐景点”双功能,对比ReAct与FunctionCall两种实现模式,并详解工具封装、记忆管理、执行框架等LangChain核心优势。代码开源,含FastAPI后端与原生HTML/JS前端。
478 3
|
8月前
|
人工智能 文字识别 自然语言处理
数智化改造ERP的真实实操记录:从传统到智能的落地过程
本文分享了基于JBoltAI框架对传统ERP系统进行低侵入式数智化改造的实战经验。针对数据录入繁琐、流程协同不畅、决策缺乏支撑等痛点,通过集成AI能力,实现采购合同解析、库存智能预警、财务自动报销、生产智能助手等场景自动化。依托JBoltAI的文档处理、RAG知识库、Agent智能体与Function调用等特性,在不重构原有SpringBoot架构的前提下,完成AI赋能,显著提升效率与决策水平,为传统ERP转型提供可复用的技术路径。
859 0
|
存储 SQL 关系型数据库
数据库设计的基本原则和主要步骤以及应注意什么?
数据库设计的基本原则和主要步骤以及应注意什么?
920 0
|
设计模式 前端开发 数据库
「全网最细 + 实战源码案例」设计模式——桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化,从而降低代码耦合度,避免类爆炸,提高可扩展性。其结构包括实现类接口、具体实现类、抽象类和精确抽象类。适用于多维度扩展类、隐藏实现细节、简化庞杂类以及运行时切换实现方法的场景。优点包括高扩展性、隐藏实现细节、遵循开闭原则和单一职责原则;缺点是可能增加代码复杂度。示例中展示了不同操作系统播放不同格式视频文件的实现。
542 19
|
Linux Python Windows
在终端怎么升级python
Windows上,使用`Win+R`打开命令行,运行`cmd`,然后用`python -m ensurepip --upgrade`更新pip。通常需从官网下载安装新版本Python。验证版本用`python --version`。 Mac/Linux,打开终端,用`conda update python`(Anaconda/Miniconda环境)或手动下载安装新版本。 验证版本:`python3 --version`或`python --version`。
1604 9
ThreeJs场景中添加视频
这篇文章详细说明了如何在Three.js场景中添加并播放视频,包括视频纹理的创建与应用,以及如何将视频流显示在3D模型的表面上。
859 3
ThreeJs场景中添加视频