==========================

数组

==========================

一.认识数组

oc中可以把NSObject对象的子类放到数组这个集合中,但是int、float、double等基础数据类型需要先进行转换才可以存入数组。

oc中数组以NS开头,其中分为可变数组和不可变数组;

1.不可变数组(NSArray)

数组在创建的时候被初始化之后,不可以再次进行增、删、改;

//NSArray 是一个类,苹果公司封装好的数组类。

//数组需要先分配内存再使用,

//initWithObjects 逐个单词翻译:init -- 初始化 with ---对... objects --- 多个对象

//initWithObjects 用多个对象对 [NSArray alloc] 分配的内存空间进行初始化

NSString* str = [NSString stringWithFormat:@"%d",123];

NSArray* arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];

//【注】以小括号包围,每个数据都是以逗号隔开的数据格式是数组数据

dog* mydog = [[dog alloc]init];

mydog.value = 100;

cat* mycat = [[cat alloc]init];

//oc中的数组可以存储不一样类型的数据

//定义objectArr这个对象并给它分配内存并初始化值,最后一个nil结尾一定不要省略

//数组初始化之后,不能对其进行增删改的数组,是不可变数组,不可变数组的数据只有第一次初始化的时候给赋值,之后不允许进行增删改;可以理解为是一种只读做用;

NSArray* objectArr = [[NSArray alloc]initWithObjects:mydog,mycat,@"yudejun", nil];

NSLog(@"%@\n%@",arr,objectArr);

//取元素

//【注】严禁数组越界

//隐式转换

//

dog* tmp = [objectArr objectAtIndex:0];

NSLog(@"%d",tmp.value);

//取数组元素个数

NSLog(@"%ld",[objectArr count]);

//遍历数组

for (int i=0; i<[arr count]; i++) {

NSLog(@"%@",[arr objectAtIndex:i]);

}

//oc中遍历数组有一个更简单的方法

//这个语法就是for(in)语法,for循环先去判断NSString* str 是否在arr中,如果在,则继续循环

//数组会遍历arr的元素个数次

for (NSString* str in arr) {

NSLog(@"%@",str);

}

//优缺点比对

//第一种写法方便遍历指定元素,但写起来繁琐。

//第二种写法简洁,并且不会出现数组越界导致程序崩溃的问题

//这2种方式互补,某一些情况下必须用第一种方式才能解决。

//从Xcode4.6开始,苹果提供如下写法

//创建了一个不可变数组并初始化了值。

NSArray* TempArr = @[@"yu",@"de",@"jun"];

//如上方法等价: NSArray* TempArr = [[NSArray alloc]initWithObjects:@"yu",@"de",@"jun", nil];

NSLog(@"%@",TempArr);

//[arr objectAtIndex:0]

NSLog(@"%@",arr[1]);

//NSMutableArray 为可变数组,可以进行增删改

NSMutableArray* m_arr = [[NSMutableArray alloc]init];

//添加元素

[m_arr addObject:@"1"];

[m_arr addObject:mydog];

[m_arr addObject:@"3"];

//删除下标索引值是0的元素

[m_arr removeObjectAtIndex:0];

//交换数组元素

[m_arr exchangeObjectAtIndex:0 withObjectAtIndex:1];

//清空数组  删除数组中所有元素

[m_arr removeAllObjects];

//删除数组元素中最后一个元素

[m_arr removeLastObject];

//插入一个元素,在索引值是0的位置,原来元素位置后移

[m_arr insertObject:@"haha" atIndex:0];

//替换元素 用999这个对象值来替换掉第0个元素的值

[m_arr replaceObjectAtIndex:0 withObject:@"999"];

//判断是否包含某一个对象

BOOL isContain = [m_arr containsObject:@"999"];

if (isContain) {

NSLog(@"包含");

}

else

{

NSLog(@"不包含");

}

Oc中的数组的更多相关文章

  1. OC中数组类NSArray的详解,常用属性和方法(一)

    数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制. 通过下标访问数组元素,下标从0开始. NSA

  2. OC中Foundation框架之NSArray、NSMutableArray

    NSArray概述 NSArray是OC中的数组类 NSArray特点 )只能存放任意OC对象,并且是有顺序的 )不能存放非OC对象,比如int/float/double/char/enum/stru ...

  3. Swift的数组与OC中数组的区别

    相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSAr ...

  4. OC中如何把数组中字典的数据转换成URL?

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

  5. Objective-C中把数组中字典中的数据转换成URL

    可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...

  6. OC中@property属性关键字的使用(assign/weak/strong/copy)

    OC中@property属性关键字的使用(assign/weak/strong/copy) 一.assign 用于 ‘基本数据类型’.‘枚举’.‘结构体’ 等非OC对象类型 eg:int.bool等 ...

  7. OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法

    字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 ...

  8. OC中的NSNumber、NSArray、NSString的常用方法

    和C语言不同,在Objective-C语言中,有单独的字符串类NSString.C语言中,string是由 char(ASCLL码)字符组成 OC中,字符串是由unichar(Unicode)字符组成 ...

  9. OC基础 可变数组与不可变数组的使用

    OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...

随机推荐

  1. 手机端布局 - rem计算

    功能说明:以一个640px的宽度为基准,最小不低于320px,当大于640px时,让其在页面中居中. 如果正处于640 - 320之中的,都按照js进行等比例的缩放. 这里我们规定1rem = 100 ...

  2. C#开源

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  3. Visual Studio 2012 Update 4 RC 启动调试失败解决方案

    以下解决办法适用于任何Visual Studio开发环境,及Windows NT 6.1以上系统. 系统:Windows 8.1 Enterprise x64 RTM 开发环境:Visual Stud ...

  4. 在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储

    在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如 ...

  5. git Submodule

    http://www.kafeitu.me/git/2012/03/27/git-submodule.html https://git-scm.com/book/zh/v2/Git-%E5%B7%A5 ...

  6. 通用高性能 Windows Socket 组件 HP-Socket v2.2.2 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  7. Node.JS事件驱动机制

    1.事件驱动程序绑定事件及事件的处理程序 eventEmitter.on('eventName', eventHandler); 我们可以通过程序触发事件 // 触发事件 eventEmitter.e ...

  8. 获取spring容器要小心的坑

    情景: 今天想把一个web应用中的上传路劲更改一下 于是就在配置文件作了如下变动: <bean id="uploadServelt" class="com.xxxx ...

  9. 更加简洁易用——wangEditor富文本编辑器新版本发布

    1. 前言 wangEditor富文本编辑器(www.wangEditor.com)从去年11月份发布,至今已经有将近10各月了.它就像一个襁褓中的小婴儿,在我的努力以及众多使用者的支持下不断摸索.成 ...

  10. toastr 自定义提示

    在线实例 实例演示 使用方法 <button type="button" class="btn btn-primary" id="showtoa ...