1、数组类

 1> 回顾C语言数组

  数组是一个有序的集合, 来存储相同数据类型的元素。

  通过下标访问数组中的元素,下标从 0 开始。

 2> 数组

  数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制。

  通过下标访问数组元素,下标从 开始。

  NSArray:不可变数组,即:对象创建好以后,数组中元素个数不能发生变化。

  NSMutableArray:可变数组,即对象创建好以后,数组中的元素可以灵活进行增删改操作。

 3> NSArray创建

  ① 初始化方法

  NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];

  注: nil 作为数组存放元素的结束标志,多个元素通过逗号间隔。

  ② 便利构造器

  NSArray *names = [NSArray arrayWithObjects:@"frank", @"duck", @"monkey", nil];

  ③ 字面量

  使 " @[] " , " [] "中存入对应的对象,对象之间使 "," 相隔。比如:
        NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"];

 4> NSArray常用的方法

          /**
* 2.数组查找
*/
// 通过下标访问对象
NSLog(@"%@", a2[]); NSLog(@"%@", [a1 objectAtIndex:]); // 通过对象访问下标
NSLog(@"afu在%lu位置", [a1 indexOfObject:@"afu"]); /**
* 3.判断数组中是否包含某个指定的对象
*/
BOOL isHave = [a3 containsObject:@"zhatian"];
NSLog(@"isHave = %d", isHave); /**
* 4.NSString和NSArray之间的转换
*/
// 将一个字符串按照指定的字符截取,每段内容存放在数组中
NSString *string1 = @"孙超&孟玲旭&程涵";
NSArray *strArray = [string1 componentsSeparatedByString:@"&"];
NSLog(@"count = %lu", strArray.count); // a5.count用于得到数组的长度
for (int i = ; i < strArray.count; i++) {
NSLog(@"strArray[%d] = %@", i, strArray[i]);
} // 将数组中的元素按照指定的字符拼接成新的字符串对象
NSArray *a5 = @[@"雷坤", @"于艳平", @"尹浩"];
NSString *string2 = [a5 componentsJoinedByString:@"&"];
NSLog(@"string2 = %@", string2);

5> NSMutableArray创建

 NSMutableArray 继承于 NSArray,也就是说 NSArray 的所有创建方法 NSMutableArray 都可以使用,NSMutableArray 特有创建的方法如下:

 ① 初始化方法

  NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:0];

 ② 便利构造器

  NSMutableArray *names = [NSMutableArray arrayWithCapacity:0];

 ③ 字面量

  NSMutableArray *names = [@[@"frank", @"duck", @"monkey", @"cow"] mutableCopy];

6> NSMutableArray常用方法

         // 1.创建对象
NSMutableArray *ma1 = [[NSMutableArray alloc] initWithObjects:@, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil]; NSMutableArray *ma2 = [NSMutableArray arrayWithObjects:@"quguowei", @"xiaonan", @"zhouyuqi", @"bobo", @"xiaozun", nil]; NSMutableArray *ma3 = [@[@"yangyingda", @"yangshukai", @"yida", @"zhatian", @"wumingwei"] mutableCopy]; NSMutableArray *ma4 = [[NSMutableArray alloc] initWithCapacity:]; NSMutableArray *ma5 = [NSMutableArray arrayWithCapacity:]; // 2.添加元素
[ma1 addObject:@"zf"];
NSLog(@"ma1 = %@", ma1); // 插入元素
[ma2 insertObject:@"zf" atIndex:];
NSLog(@"ma2 = %@", ma2); // 3.删除元素
// 删除指定对象
[ma3 removeObject:@"zhatian"];
NSLog(@"ma2 = %@", ma2); // 删除最后一个对象
[ma3 removeLastObject];
NSLog(@"ma2 = %@", ma2); // 删除指定下标的对象
[ma2 removeObjectAtIndex:];
NSLog(@"ma2 = %@", ma2); // 删除所有的对象
[ma2 removeAllObjects];
NSLog(@"ma2 = %@", ma2); // 4.替换指定位置的对象
NSMutableArray *ma6 = [[NSMutableArray alloc] initWithObjects:@, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil]; // 替换指定位置的对象
[ma6 replaceObjectAtIndex: withObject:@"zf"];
NSLog(@"ma6 = %@", ma6); // 5.交换指定位置的对象
[ma6 exchangeObjectAtIndex: withObjectAtIndex:];
NSLog(@"ma6 = %@", ma6); [ma6 setObject:@"jing" atIndexedSubscript:];
NSLog(@"ma6 = %@", ma6);

2、字典类

 1> 字典的概述

  字典是一个无序的集合, 来存储具有一一对应关系的数据。

  字典中存储的每一个对象都是一对键值对,键值对包含两个部分key和value,key与value的值都是对象类型。

  对于每一对key-value称为一个 条 (Entry)。

  字典中的key值是唯一的

 2> 字典的特点

  与数组不同,字典靠key存取元素。

  key与value必须都是对象类型。

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

  字典分为两种类型不可变字典(NSDictionary),可变字典 (NSMutableDictionary)。

 3> NSDictionary 创建方法和常用的方法

         /**
* 1.创建对象
*/
// 初始化方法
NSDictionary *dict1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"boy", @"sex", @, @"age", nil];
NSLog(@"dict1 = %@", dict1); NSDictionary *dict2 = [[NSDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @] forKeys:@[@"name", @"sex", @"age"]];
NSLog(@"dict2 = %@", dict2); // 类方法
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @, @"age", @"nan", @"sex", nil];
NSLog(@"dict3 = %@", dict3); NSDictionary *dict4 = [NSDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @] forKeys:@[@"name", @"sex", @"age"]];
NSLog(@"dict4 = %@", dict4); // 字面量
NSDictionary *dict5 = @{
@"name" : @"gaojie",
@"sex" : @"boy",
@"age" : @,
@"hobby": @"nana"
};
NSLog(@"dict5 = %@", dict5); /**
* 2.查找
*/ // 根据key查找object
NSString *string1 = [dict5 objectForKey:@"name"];
NSLog(@"string1 = %@", string1); // 下标法 下标为key值
NSLog(@"%@", dict5[@"name"]); /**
* 3.获取字典的长度
*/
NSLog(@"count = %lu", dict5.count);

 3> NSMutableDictionary 创建方法和常用的方法

         // 1.创建对象
// 初始化方法
NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"liuaoran", @"name", @, @"age", @"nan", @"sex", nil];
NSLog(@"mdict1 = %@", mdict1); NSMutableDictionary *mdict2 = [[NSMutableDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @] forKeys:@[@"name", @"sex", @"age"]];
NSLog(@"mdict2 = %@", mdict2); // 类方法
NSMutableDictionary *mdict3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @, @"age", @"nan", @"sex", nil];
NSLog(@"mdict3 = %@", mdict3); NSMutableDictionary * mdict4 = [NSMutableDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @] forKeys:@[@"name", @"sex", @"age"]];
NSLog(@"mdict4 = %@", mdict4); // 2.添加、修改键值对 // 方法位于NSMutableDictionary类中
[mdict1 setObject:@"lisi" forKey:@"name1"]; // 当key存在时,只会讲value修改,若不存在,则会增加一个新的键值对
NSLog(@"mdict1 = %@", mdict1); // 方法位于NSObject类中
[mdict2 setValue:@"qinghedasha" forKey:@"address"];
NSLog(@"mdict2 = %@", mdict2); /*
setVlaue: forKey: 的key参数类型必须是NSString * ,是OBject对象的方法,也就是说所有的OC对象都有这个方法。
setObject: forKey: 的key参数类型可以使任意类型的对象,是NSMutableDictionary类中特有的方法。
*/ [mdict2 addEntriesFromDictionary:@{@"name1" : @"lishi"}];
NSLog(@"mdict2 = %@", mdict2); // 3.删除
// 通过key进行删除
[mdict1 removeObjectForKey:@"name1"];
NSLog(@"mdict1 = %@", mdict1); // 删除所有内容
[mdict1 removeAllObjects];
NSLog(@"mdict1 = %@", mdict1);

3、集合类

 1> 集合的描述

  集合是 OC 中另一个容器,开发过程中使用的范围并没有数组和字典频繁。OC中的集合分为不可变集合(NSSet)和可变集合(NSMutableSet)两种。

 2> 集合的特点

  ① 互异性 集合中不能够存在两个相同的对象。

  ② 无序性 集合中的对象没有顺序,先添加的对象不一定在第一个位置,后添加的也不一定在最后的位置。

 集合经常用来处理重用问题

 3> NSSet的创建

 // 初始化方法
NSSet *set1 = [[NSSet alloc] initWithObjects:@"frank", @"duck", @"monkey", nil]; // 类方法
NSSet *set2 = [NSSet setWithObjects:@"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", @"afu", nil];

 注意:不可变集合一旦创建,集合中的对象无法修改,只能从集合中读取对象,并且没有快速创建集合对象的字面量。

 4> NSSet的常用操作

         // 任意取一个元素
NSString *str = [set anyObject];
// 取出所有元素
NSArray *array = [set allObjects];
NSLog(@"%@", array);
// 获取集合中元素个数
NSLog(@"%lu", set.count);
// 判断对象是否在集合中
NSLog(@"%d", [set containsObject:@"nana"]);

 5> NSMutableSet概述

  NSMutableSet(可变集合)的父类是NSSet,具有NSSet所有的方法,同时在其基础上又添加了"添加"和"删除"对象的操作。

 6> NSMutableSet常用操作

         // 添加对象
[mset addObject:@"-1"];
// 删除一个对象
[mset removeObject:@"-1"];
// 删除所有对象
[mset removeAllObjects];

iOS学习15之OC集合的更多相关文章

  1. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  2. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  3. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  4. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  5. iOS学习14之OC NSNumber + NSValue

    1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...

  6. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  7. iOS学习之Object-C语言集合遍历和数组排序

    一.集合遍历      1.集合:OC中提供的容器类,数组,字典,集合.      2.遍历:对集合中元素依次取出的过程叫做遍历. 二.for循环遍历      1.通过for循环的循环变量用作数组元 ...

  8. iOS学习之Object-C语言集合

    一.数组类      1.C语言数组的特点:数组是一个有序的集合,用来存储相同数据类型的元素,通过下标访问数组中的元素,下标从0开始.      2.OC中的数组只能存储对象类型(必须是NSObjec ...

  9. 【原】iOS学习18之OC内存管理高级

    1.属性的内存管理 1> 属性的语义特性 2> assign下的属性内部实现 @property (nonatomic, assign) NSString *name; @synthesi ...

随机推荐

  1. 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至

    导语 昨天上午,微信在广州举办了微信公开课Pro.于是,精神哥这两天的朋友圈被小龙的"八不做"刷屏了.小伙伴们可能不知道,下午,微信公开课专门开设了技术分论坛.在分论坛中,微信开源 ...

  2. Netty构建分布式消息队列实现原理浅析

    在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...

  3. Lesson 17 Always young

    Text My aunt Jennifer is an actress. She must be at least thirty-five years old. In spit of this, sh ...

  4. Java下好用的开源库推荐

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...

  5. 利用HTML5 的Datalist 元素实现输入提示

    HTML5有无限可能,总是在释出一些新鲜实用的功能,让原生的web环境更加炫酷. 今天看到datalist 这个元素,可以用来预先定义一个输入框的潜在选项,也就是我们在平时项目中经常用jQuery插件 ...

  6. C# 开发windows服务的一些心得

    最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...

  7. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  8. memcached安装及.NET中的Memcached.ClientLibrary使用详解

    序言 吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下. 本篇主要说下:memcached分布式缓存的负载均衡配置 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版

    系列目录 本节不再适合本系统,在58,59节已经重构.请超过本节 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结 ...

  10. springMVC+ajax 文件上传 带进度条

    前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...