进击的KFC:OC(五): 字典、集、数组排序

2023-12-22 08:38
文章标签 数组 排序 字典 oc kfc 进击

本文主要是介绍进击的KFC:OC(五): 字典、集、数组排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⼀、字典类
字典⽤于保存具有映射关系(key-value对)数据的集合。
对于“name:张三”来讲,key就是“name”,key对应的value是“张三”
⼀个key-value对认为是⼀个条⺫(Entry),字典是存储key-value对的容器。

字典类的特点
与数组不同,字典靠key存取元素。
key不能重复,value必须是对象。
key 作为钥匙,要具有唯一性 在开发中,一般使用字符串作为
key值
value 可以是一个很复杂的结构,例如字典嵌套字典等
键值对在字典中是⽆序存储的。(若是有序的,就成数组了)
字典分:不可变字典(NSDictionary)和可变字典
(NSMutableDictionary)

pragma mark ——– 不可变字典

不可变字典: (切记:不能对不可变字典进行增删)

初始化一个字典
1.用两个数组 来初始化 一个不可变字典
// key 的数组:
NSArray *keys = [[NSArray alloc]initWithObjects:@”name”,@”sex”,@”age”, nil];
// value 的数组
NSArray *values = @[@”aaa”,@”man”,@”3”];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:values forKeys:keys];

2.初始化一个字典
// 使用下面这个方法初始化时:切记: 是 value key 的顺序

 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"wanglong",@"name",@"man",@"sex",@"3",@"age" ,nil];

把所有key取出来
NSArray *kes = [dic allKeys]; // allKeys,获取全部的key值,返回值类型是数组
取出所有value
NSArray *values = [dic allValues];

3.语法糖 key : value (和上面的2方法区分)

       NSDictionary *dic = @{@"name":@"wanglong",@"sex":@"man",@"age":@"3"};

根据key取出字典中对应的value
NSString *str = [dic objectForKey:@”sex”];

语法糖 取出字典key对应的value (类似数组a[1]这样,dic[key])
NSString *age = dic[@”age”];

pragma mark ——– 可变字典

切记:必须进行初始化,才能使用字典

1.初始化一个空字典
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
2.初始化的时候 给一个建议的容量

NSMutableDictionary *dic1 = [[NSMutableDictionary alloc]initWithCapacity:10];

3.初始化一个空字典
NSMutableDictionary *dic2 = [[NSMutableDictionary alloc]init];

添加键值对(注意:是 set 不是add)
[dic setObject:@”Wanglong” forKey:@”name”];
[dic setObject:@”man” forKey:@”sex”];
[dic setObject:@”3” forKey:@”age”];

删除: 把整个键值对删除了
[dic removeObjectForKey:@”sex”];
NSLog(@”%@”,dic);
// 删除全部:
[dic removeAllObjects];
NSLog(@”%@”,dic);

// 创建一个字典 姓名:王龙 性别:男 年龄:NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:@"王龙" forKey:@"姓名"];[dic setObject:@"男" forKey:@"性别"];[dic setObject:@"18岁" forKey:@"年龄"];
 // 遍历字典:// 遍历数组// 取出所有keyNSArray *keys = [dic allKeys];for (int i = 0; i < [keys count]; i++) {// 取出每一个keyNSString *key = keys[i];// 再利用这个key取出对应的valueNSString *value = dic [key];NSLog(@"%@ %@",key,value);// 或者://        NSString *value2 = [dic objectForKey:keys[i]];//        NSLog(@"%@ %@",keys[i],value2);}
    // 快速遍历forin时// 遍历字典 是遍历字典中的所有key//        for (NSString *obj in dic) {
//            NSLog(@"%@",obj);
//            // 用所有key取出value
//            NSLog(@"%@",[dic objectForKey:obj]);
//            // 结合起来
//            NSLog(@"key = %@ value = %@",obj,[dic objectForKey:obj]);
//        }

⼆、集合类

pragma mark —— 集合

存储的元素是⽆序的
存储元素必须是对象类型
iOS中⽤Set表⽰集合,分NSSet和NSMutableSet

NSSet的常⽤⽅法
创建集合对象。
NSSet *set = [NSSet alloc]initWithObjects@”1”,@”2”,nil]
获取元素个数。
[set count]
获取集合中的某个元素。
[set anyObject]

NSMutableSet的常⽤⽅法

创建集合对象。
NSMutableSet *set = [NSMutableSet set];
添加元素。
[set addObject:@”2”];
删除元素
[set removeObject:@”2”];

pragma mark ——- 数组排序

   //  不可变数组NSArray *arr = @[@"1",@"3",@"4",@"6",@"8"];// 这种比较方法,对元素只比较第一位,                             升序NSArray *arrnew = [arr sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",arrnew);// 可变数组// 可变数组排序 是不需要返回值的,因为操作的是原数组NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"3",@"7",@"5", nil];[array sortUsingSelector:@selector(compare:)];NSLog(@"%@",array);

这篇关于进击的KFC:OC(五): 字典、集、数组排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/523299

相关文章

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常