Objective-C之Foundation框架中的NSDictionary的用法以及它的遍历方法

Swift3的Dictionary和OC的NSDictionary关系 在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复, 值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典。  NSDictionary与Dictionary之间的关系如同NSArray与Array之间的关系,Swift 阅读详情

常用与创建NSDictionary的方法:
+ (id)dictionary;
+ (id)dictionaryWithObjtct:(id)object forKey:(id <NSCopying>)key;
+ (id)dictionaryWithObjectAndKeys:(id)firstObject,...
+ (id)dictionaryWithDictionary:(NSDictionary *)dict
+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
- (id)initWithObjectsAndKeys:(id)firstObject,...
- (id)initWithDictionary:(NSDictionary *)otherDictionary
- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
+ (id)dictionaryWithConentsOfFile:(NSString *)url
+ (id)dictionaryWithCOntentsURL:(NSString *)path
- (id)initWithContentsOfFile:(NSString *)path
- (id)initWithContentsOfURL:(NSString *)url

常用方法:
//多少键值对
- (NSUInteger)count;
//比较两个字典
- (Bool)isEqualToDictionary:(NSDictionary *)otherDictionary
//将一个NSDictionary持久化到一个文件中
- (Bool)writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile
//返回所有的key
- (NSArray *)allKeys
//返回Object元素对应的所有key
- (NSArray *)allKeysForObject:(id)anObject
//返回所有的value
- (NsArray *)allValues
//根据key返回value
- (id)objectForKey:(id)akey
//返回keys对应的所有value,如果没有对应的value,用marker代替,根据多个key返回多个value
//当可以找不到对应的value时,用marker代替
- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(id)marker


字典的遍历:
1、快速遍历:
for (NSString *key in dict)
2、迭代器遍历:
//key迭代器
- (NSEnumerator *)keyEnumerator
//对象迭代器
- (NSEnumerator *)objectEnumerator

3、block遍历:见下面测试demo代码
4、字典的内存管理:
见下面测试demo代码


对key排序(用法和NSArray排序类似):
- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr
- (NSArray *)kyesSortedByValueWithOptions:(NSSortOptions)opts  usingComparator:(NSComparator)cmptr
- (NSArray *)keysSortedByValueUsingSelector:(SEL)comparator

测试demo如下:
void dictCreate(){
   
    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"test" forKey:@"t"];
    NSLog(@"%@", dict);
}

void dictUse(){
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"a",@"k1",
                          @"b",@"k2",
                          @"c",@"k3",
                          nil];
   
    NSLog(@"count=%zi", dict.count);
    //write to file
    NSString *path = @"/Users/gongpb/develop/NSDictionary/NSDictionary/dict.xml";
    [dict writeToFile:path atomically:YES];
   
    dict = [NSDictionary dictionaryWithContentsOfFile:path];
    NSLog(@"dict:%@",dict);
   
    NSArray *array = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k4", nil]  notFoundMarker:@"not found"];
    NSLog(@"find result:%@",array);
 }
//快速遍历
void dictFor1(){
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"a",@"k1",
                          @"b",@"k2",
                          @"c",@"k3",
                          nil];
    for (id key in dict) {
        id value=[dict objectForKey:key];
        NSLog(@"%@=%@",key,value);
    }
}
//迭代器遍历
void dictFor2(){
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"a",@"k1",
                          @"b",@"k2",
                          @"c",@"k3",
                          nil];
  
    NSEnumerator *enumer = [dict keyEnumerator];
    id key = nil;
    while (key = [enumer nextObject]) {
        id value = [dict objectForKey:key];
        NSLog(@"%@=%@",key,value);
    }
}
#pragma mark block遍历
void dictFor3(){
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"a",@"k1",
                          @"b",@"k2",
                          @"c",@"k3",
                          nil];
   [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
       NSLog(@"%@=%@",key,obj);
   }];
  
}
//字典内存管理
void dictMemory(){
    Student *stu1 = [Student studentWithName:@"stu1"];
    Student *stu2 = [Student studentWithName:@"stu1"];
    Student *stu3 = [Student studentWithName:@"stu1"];
    //一个对象作为字典的key或者value时,会做一次retain操作,计数器会加一
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          stu1,@"k1",
                          stu2,@"k2",
                          stu3,@"k3",
                          nil];
   // 当字典被销毁时,里面所有key和value都会有一次releas操作,计数器减一
    NSLog(@"%@",dict);
   
   
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
      
        NSLog(@"-------dictCreate------");
       // dictCreate();
        NSLog(@"-------dictUse----------");
        dictUse();
        NSLog(@"-------dictFor1---------");
        dictFor1();
        NSLog(@"-------dictFor2----------");
        dictFor2();
        NSLog(@"-------dictFor3-----------");
        dictFor3();
        NSLog(@"-------dictMemory---------");
        dictMemory();
    }
    return 0;
}
.h文件:
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (nonatomic,retain)NSString *name;
+(id)studentWithName:(NSString *)name;
@end

.m文件:
#import "Student.h"

@implementation Student
+ (id)studentWithName:(NSString *)name{
    Student *stu = [[[Student alloc] init] autorelease];
    stu.name = name;
    return stu;
}
- (void)dealloc{
    NSLog(@"student:%@  is destroyed",_name);
    [super dealloc];
}

@end

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀 本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。 阅读详情

相关推荐

ICCompiler II实战:从NDM生成到APR流程的完整避坑指南

本文是一份针对ICCompiler II(ICC II)后端物理实现流程的实战避坑指南。文章详细解析了从NDM库生成、设计初始化、布局规划到时钟树综合与布线的完整APR流程,重点分享了各环节的常见陷阱、精细化配置命令与调试经验,旨在帮助工程师高效达成PPA目标,确保设计一次成功。

p4q5r6s7t的博客 531

NSDictionary创建、引用以及遍历等功能(Objective-C 开发范例)

NSDictionary创建、引用以及遍历等功能

q_023的博客 1889

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1431

Object C学习笔记13-Dictionary字典

  通过Array数组和Set集合的学习和理解,可以想象得到Dictionary也分为两种情况了,那就是可变和不可变两种类型的。的确如此,在Object C中提供了两个字典类,分别为NSDictionary 和 NSMutableDictionary. 在.NET中我们也学习过Dictionary类,这个集合的存储方式是键值对的方式存储的。而且使用Dictionary查找元素也极为简单。   ...

weixin_34178244的博客 214

蚂蚁区块链第20课 可信存证司法链从入门到实施

1. 摘要 杭州互联网法院和司法区块链平台的技术建设方都是蚂蚁金服区块链。那么,如何借助蚂蚁的技术能力和服务能力,快速对接上司法链,便于后续打通存证/维权的闭环流程。本文介绍蚂蚁区块链可信存证的业务及特点,费用及接入方法等,具有实战指导意义。 2. 蚂蚁区块链可信存证的介绍 蚂蚁区块链可信存证具备全链路可信,司法权威节点见证,安全隐私保护,一站式接入能力,全国首家法律认可的区块链存证平台。 2...

辉哥的技术投资路 6086

ROS2+MoveIt2+Gazebo仿真实战:从零搭建六轴机械臂控制闭环

本文详细介绍了如何从零搭建一个完整的ROS2+MoveIt2+Gazebo六轴机械臂仿真控制闭环。通过手写URDF模型、配置MoveIt2运动规划、集成Gazebo物理仿真与ROS2 Control控制器,最终实现RViz中规划轨迹、Gazebo中同步执行的完整数字孪生验证平台,为机器人算法开发和硬件验证提供低成本、高效的仿真解决方案。

weixin_29093017的博客 486

【NSDictionary数组的遍历 Objective-C语言】

NSDictionary数组的遍历 Objective-C语言

madoca的博客 1089

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 944

Objective-c:集合类型遍历方法详解

前言在编程中经常需要遍历集合类型的元素,当前有多种方法实现此功能,初学者大多习惯于用标准的C语言循环,当然也可以使用 NSEnumerator 以及快速遍历(for-in),Objective-c 引入‘块’特性后,又多出来几种新的遍历方式,采用这几种新的遍历方式,可大幅度简化代码过程。本文主要讲解常用的几种集合类型:NSArray、NSSet 以及NSDictionary 的遍历方式。for 循环

李鴻耀 2475

YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好,本专栏自开设两个月以来已经更新改进教程120+余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新,订阅本专栏以后你不仅可以收获跟专栏的阅读权限,同时可以进Qq群,里面包含集成我所有创新的YOLO最新目录,和我本人录制的视频讲解教程,如果你想要在YOLOv8系列收获一篇论文,我相信订阅本专栏后你一定会有所收获~YOLOv8改进有效系列目录。

Snu77的博客 18万+

英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍

简单介绍英飞凌 AURIX TC3XX 系列多核单片机的 Flash,便于快速上手使用

大橙子的博客 6640

Objective-C中遍历字典、数组和集合的几种常见方式

一、使用for循环   在objective-c语言中,要遍历字典、数组或者是集合,for循环是最简单也用的比较多的方法,示例如下:  //普通的for循环遍历 -(void)iteratorWithFor {     //////////处理数组//////////     NSArray *arrayM = @[@"1",@"2",@"3",@"4"];     NSIntege

qq_32506555的博客 1017

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

Objective-C Foundation框架实践——NSDictionary(一)

字典是OC中一种特殊的类型,功能非常强大。是Foundation中的重要组成部分。我们来学习一下: #import int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... /* 字典: 1.存储的内存不是连续的;

乞力马扎罗的雪CYF的博客 2075

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Objective-C的Foundation框架——字典NSDictionary

NSDictionary...

痴_Pro的博客 348

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【黑马程序员】Foundation框架NSDictionary

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------    一、NSDictionary的介绍及使用  1、什么是NSDictionary NSDictionary翻译过来叫做”字典”。        日常生活中, “字典”的作用:通过一个拼音或者汉字,就能找到对应的详细解释。        NSDictionary的作用类

yi_252892240的博客 399

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Objective-C: Foundation——NSDictionary、NSMutableDictionary、Block

1.NSDictionary1.1 由键值组成,关键字不允许重复,值可以重复。 1.2 创建方法 1.3 求键值对个数 1.4 将字典中的所有值转换成数组 1.5 将字典中的所有关键字转换成数组 1.6 通过关键字找到对应的值(3种) 1.7 通过值来找到对应的关键字 1.8 对字典的值进行排序 1.9 遍历(3种) 1.10 字典的文件读写方法 main函数int main(i

cz_zol的博客 663

Foundation框架详解

重写isEqual:和hash方法(isEqual:方法判断相等,hash返回值相等)实现copyWithZone:方法,最好返回该对象的不可变副本为了避免索引(key)被破坏,NSDictionary总会先调用该key的copy方法复制该对象的不可变副本,然后用该副本作为NSDictionary的key。

2401_87841908的博客 1009

Foundation框架—NSArray、NSSet、NSDictionary、NSNumber、NSDate、NSValue

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- ---NSArray NSArray:OC数组,它不能存放空值(nil或者0)只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等 1.NSArray的基本操作 1>最简单数组对象的建立   NSArray *a

IOS学习日记 834

【Objective-C】—— Foundation框架详解(下)

本周学习了OC中Foundation框架的剩余内容,下面总结一下本周的学习成果如果想使用自定义类作为NSDictionary的key,则自定义类需满足如下要求:1.该自定义类正确重写过isEqual:和hash方法。也就是说当两个对象通过isEqual:方法判断相等时,两个对象的hash方法返回值也相等。2.该自定义类必须实现copyWithZone:方法,该方法最好返回该对象的不可修改副本。示例代码如下:User.hUser.m。

m0_73974920的博客 506

【Effective Objective-C】—— 系统框架

第47条:熟悉系统框架 编写OC应用程序的时候我们几乎都会用到系统框架,其中提供了很多我们经常使用的类,并且我们使用的系统框架也是会随着官方的更新而更新的。 将一系列代码封装为动态库,并在其中放入描述其接口的头文件,这样做出来的东西就叫框架。 我们经常使用的就是Foundation框架,像NSObject、NSArray等等的类都在其中。这个框架中的类通常都是以NS前缀开头的,此前缀是在OC语言用作NeXTSTEP操作系统的编程语言时首度确定的,这个框架基本上就可以说是OC应用程序的基础了。 还有个与Fou

m0_55124878的博客 1382

Foundation框架之NSDictionary

NSDictionary 字典,由键值对组成,通过一个key(键), 就能找到对应的value(值) 。 是不可变的, 一旦初始化完毕, 里面的内容就无法修改

angle0018的博客 395

Objective-C:Foundation框架-常用类-NSDictionary

  与NSString、NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary。其用法如下: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, retain) NSString *nam...

asqwzx123123123123的博客 132

——黑马程序员——OC中Foundation框架NSDictionary的使用

-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------

yhp1095785221的博客 414

Foundation框架—字典NSDictionary 可变和不可变

Foundation 框架初体验 _______________ NSDictionary 不可变字典 _______________ //字典和数组的区别 1.字典的内存不是连续的 数组是连续的 2.用key和value进行对应(键值)kvc键值编码 (数组是下标) 3.字典的输出为 {} 数组的输出为()//不可变的字典 要赋值 申明之后就不能改了// 对

TenMios的博客 1325

黑马程序员——Foundation框架入门:NSString,NSArray,NSDictionary和NSURL

NSStringNSString的常用方法 - (unichar)characterAtIndex:(NSUInteger)index; 获取字符串中指定下标的字符。可以使用该方法逐个输出字符串中的字符 - (NSUInteger)length; 获取字符串长度,指字符个数,一个英文字母或者一个汉字或者一个数字都是1的长度。 - (NSComparisonResult)compare:(NSStr

timehzy的博客 654
上一篇: Objective-C之foundation中四种数组NSArray的排序方法
下一篇: Objective-C之Foundation框架的NSMutableDictionary
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值