字典,数组 ,集排序

一、字典类

存储以下数据

name:张三; sex:男;age:18

film:风暴; playcount:10000次;price:60元

字典类用于保存具有映射关系(key-value对)的数据

对于“name:张三”来讲,key就是“name”,key对应的value是“张 三”

一个key-value对认为是一个元素(实体),字典是存储key-value对 的容器。

//字典里一个key只有一个vlaue, 但是一个value可以有好几个key

NSDictionary  * dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"boy", @"sex", @"toyke", @"address", nil];//初始化创建字典

NSLog(@"%@", dic1);

NSArray * value = [[NSArray alloc] initWithObjects:@"张三", @"李四", @"王五", @"赵六", nil];

NSArray * key = [[NSArray alloc] initWithObjects:@"name3", @"name4", @"name5", @"name6", nil];

NSDictionary * nk = [[NSDictionary alloc] initWithObjects:value forKeys:key];//初始化+数组创建字典

NSLog(@"%@", nk);

特点:

与数组不同,数组靠下标存取数据,数组的下标是唯一的。

字典靠key存取元素。key不能重复,value必须是对象。

键值对在字典中是无序存储的。

NSDictionary  不可变字典

字典一旦创建,键值就不可更改,不可添加,不可删除         仅能读取key或者value

创建字典  //

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"lisi",@"name",@"man",@"sex",@18,@"age", nil];

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"lisi",@"name",@"man",@"sex",@18,@"age", nil];

NSDictionary的子类

NSLog(@"%@ %@",dict,[dict objectForKey:@"sex"]);

可变字典  NSMutableDictionary       是NSDictionary的子类     可以对管理的键值进行增,删,改

/    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"lisi",@"name",@"man",@"sex",@,@"age", nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"lisi",@"name",@"man",@"sex",@,@"age", nil];//初始化一个不可变字典
NSLog(@"%@ %@",dict,[dict objectForKey:@"sex"]);
NSMutableDictionary *mdict = [NSMutableDictionary dictionaryWithCapacity:];//初始化一个可变字典
[mdict addEntriesFromDictionary:dict];//把一个字典加到一个可变字典中
[mdict setObject:@"zhangsan" forKey:@"name"];//name变成zhangsan
[mdict setObject:@"study" forKey:@"hobby"];//增加一个key-value值
[mdict removeObjectForKey:@"name"];//移除姓名
[mdict removeAllObjects];//移除所有键-值对
NSLog(@"%@ ",mdict);

遍历字典

   NSArray *allkeys = [mdict allKeys];
for (int i = ; i< [allkeys count]; i++) {
NSString *key = [allkeys objectAtIndex:i];
id value = [mdict objectForKey:key];
NSLog(@"%@ :%@",key,value);
}

二、集合类

数学中有集合的概念如整数集,自然数集,iOS中也有集合类与数学中得集合对应

特点:与数学中的集合一样,存储的元素互不相同         存储的元素是无序的

存储元素必须是对象类型           iOS中用set表示集合,分NSSet和NSMutableSet

使用复数,用容器来保存,90%情况下用数组,一般用NSString

NSSet *ssee = [NSSet setWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu",@"xiaoer", nil];//初始化集合
[ssee count];//集合元素个数
NSLog(@"%@",[ssee anyObject]);//随机取一个元素
NSLog(@"%d",[ssee containsObject:@"zhangsan"]);//判断是否包含某个元素
NSLog(@"%@",ssee);

NSMutableSet可变集合 是 NSSet的子类

NSCountedSet是NSMutableSet的子类

能记录元素的重复次数

NSCountedSet *ssee1 = [NSCountedSet setWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu",@"xiaoer",@"zhaoliu",@"zhaoliu",@"zhaoliu", nil];
NSLog(@"%ld",[ssee1 countForObject:@"zhaoliu"]);//

在set的基础上添加了计数功能

三、集合类型的快速枚举

for (<#type *object#> in <#collection#>) {

}

1、object是遍历得到的元素对象。 2、collection是集合类型的对象:数组、字典、集合

 NSArray *arr1 = [NSArray arrayWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
for (NSString *num in arr1) {
NSLog(@"%@",num);
}
    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name",@"man",@"sex",@,@"age",@"study",@"hobby", nil];
for (NSString *key in dict1) {
NSLog(@"%@ : %@",key,[dict1 objectForKey:key]);
}//枚举字典
    NSSet *set1 = [NSSet setWithObjects:@"we",@"me",@"you",@"her",@"he",@"it", nil];
for (NSString *name in set1) {
NSLog(@"%@",name);
}//枚举集合

四、数组排序

oc中得数组排序

    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"d18",@"a55",@"c23",@"b64",@"e100",@"f80", nil];
[arr sortUsingSelector:@selector(compare:)];//按升序排序 // for (int i = 0; i<[arr count]-1; i++) {
// for (int j = 0; j<[arr count]-i-1; j++) {
// NSString *str1 = [arr objectAtIndex:j];
// NSString *str2 = [arr objectAtIndex:j+1];
// //if ([str1 intValue]>[str2 intValue]) {//数字从小到大排序
// //if ([str1 compare:str2 options:NSNumericSearch]==NSOrderedAscending) {//数字从大到小
// if ([str1 compare:str2]==NSOrderedAscending) {//按字符类型从大到小排序
// [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1];
// }
// }
// }
NSLog(@"%@",arr);

iOS学习笔记---oc语言第五天的更多相关文章

  1. iOS学习笔记---oc语言第一天

    第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++  java   ...

  2. iOS学习笔记---oc语言第四天

    字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...

  3. iOS学习笔记---oc语言第三天

    继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...

  4. iOS学习笔记---oc语言第十天

    内存管理高级 一 属性的内部实现原理   assign   retain    copy assign 下的属性内部实现 setter方法 @property(nonatomic,assign)NSS ...

  5. iOS学习笔记---oc语言第九天

    初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...

  6. iOS学习笔记---oc语言第六天

    Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语⾔中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函 ...

  7. iOS学习笔记---oc语言第二天

    实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc  注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...

  8. iOS学习笔记---oc语言第八天

    属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性  eg:@property NSSstring *name;相当于@interface中声明了两 ...

  9. iOS学习笔记---oc语言第七天

    类的扩展 NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻,具体的日期 时间和时区 使用+date方法获取当前日期和时间 NSDate *date = [NSDate dat ...

随机推荐

  1. BroadcastReceiver接收系统广播消息

    Android常用的广播Action常量: ACTION_TIME_CHANGED:系统时间被改变. ACTION_DATE_CHANGED:系统日期被改变. ACTION_TIMEZONE_CHAN ...

  2. Ubuntu14.04安装和配置ROS Indigo(一)

    安装ROS 配置Ubuntu的软件源 配置Ubuntu要求允许接受restricted.universe和multiverse的软件源,可以根据下面的链接配置: https://help.ubuntu ...

  3. 如何判断Intent有没有对应的Activity去处理?

    如何判断Intent有没有对应的Activity去处理?至少有以下两种方法,最近使用过,随笔记下来,以供查阅. 第一种, 如下: public boolean isIntentResolvable(I ...

  4. 面试题目-c和c++的区别

    在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少量区别.下面简要介绍一下最重要的区别.    1. 在C++中,局部变量可以在一个程序块内在任何地方声明,在 ...

  5. K2 如何和 Java 做整合?

    本文内容来自K2社区 问题:我们清楚K2 产品是基于.net 平台,我们有需求要将Java平台的表单和K2进行整合,使用K2.可以有什么方案建议? 专家解答: 这个需求也是比较常见的,以下是我的一些经 ...

  6. 系统的 host文件的作用

    有些用户可能已经注意到,我们在上网时除了可使用常规的 http://www.xxx.com或http://www.xxx.com.cn等形式的网站域名之外,还可以使用类似于“202.106.184.2 ...

  7. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  8. FZU 2072 - Count

    题意:给一个数组,每次查询输出区间内数字x出现的次数. 每次查询数字x是与其它数字无关的,所以我们可以以每个数字为索引建立一个链表,里面存放它出现的下标,这里可以保证是递增的.每次查询数字x,就在x的 ...

  9. nslayoutConstraint

    1.vfl的正确编写格式 NSDictionary *dict1 = NSDictionaryOfVariableBindings(_boxV,_headerL,_imageV,_backBtn,_d ...

  10. Java Proxy

    Client---->Interface A --        -- 代理类     Class AImpl 代理类是动态生成的,借助Proxy类和InvocationHandler接口进行实 ...