关于objective-c数组,这些方法你得知道

1,c数组

因为objective-c语言是在c语言的基础上建立的,在obj中使用c数组是完全没问题的。

定义:

int a[10]; // 定义了10个元素的整形数组

float b[10]; // 定义了10个元素的浮点型数组

注意:

以下定义是正确的:

#define NUM 5

int a[3+NUM];

int b[2+1];

以下定义是错误的:(不能使用变量表示元素个数)

int n = 5;

int a[n];

c数组本质上就是指针。

在obj中,数组有两种方法:NSArray和NSMutableArray

2,NSArray

这是一个不可变数组,不可变指的是

内容不可变(无法修改元素)

长度不可变(无法插入,删除元素)

定义:

使用实例方法创建数组对象:

// 注意最后一个元素是nil

NSArray *array1 = [[NSArray alloc]initWithObjects:

@"one",@"two",[NSNumbernumberWithInt:3], @"four", nil];

// 没有尾巴nil

NSArray *array2 = [[NSArray alloc]initWithObjects:

array1];

使用类方法创建数组对象:

// 需要带着尾巴nil

NSArray *array4 = [NSArray arrayWithObjects:

@"one", @"two", @"three", nil];

使用c数组创建数组对象:

其中arrayWithObjects后要带c类型的数组对象

NSString *strings[3];

strings[0] = @"First";

strings[1] = @"Second";

strings[2] = @"Third";

// arrayWithObjects后需要一个c类型的数组对象

NSArray *array = [NSArray arrayWithObjects:

strings count:2];

// strings array contains { @"First", @"Second" }

直接快速创建数组对象【推荐方法】:

// 不需要尾巴nil,这种方法也是最推荐的写法

NSArray *array5 = @[@"one", @"two", @"three", @"four"];

《编写高质量ios与OS X代码的52个有效方法》提及【语法糖】:多用字面量语法,少用与之等价的方法。

所以创建数组用:

NSArray *array = @[@"one", @"two", @"three"];

这样的好处显而易见:简明扼要,好理解,而且不用专门添加尾巴的空对象nil。

这里截取该书中的一段代码:

id object1 = ...;

id object2 = ...;

id object3 = ...;

// 用arrayWithObject方法创建数组

NSArray *array1 = [NSArray arrayWithObjects:

object1, object2, object3, nil];

NSArray *array2 = @[object1, object2, object3];

假设object2 = nil;

对于第一种创建方法:array1会依次处理各个参数,直到发现nil为止。

由于object2是nil,array1会提前结束,即只包含变量object1,但是程序编译时并不会提示,然后在运行时,就会抛出异常。

而第二种创建方法:array2直接抛出异常。

所以:使用字面量语法(语法糖)更为安全。

下面介绍其他方法:

根据下标获取元素:

NSArray *array;

id object1 = [array objectAtIndex:0];

id object2 = array[0];

同理:建议采用字面量语法,使用第二种取值方法,通过下标来取值。

获取第一个和最后一个元素:

NSString *first=[array firstObject];

NSString *last=[array lastObject];

根据元素获取下标:

NSInteger index=[array indexOfObject:

@"three"]; // 结果为:2

判断数组中是否存在某个元素:(containObject)

if (array containObject:@"three")

{

NSLog(@"contains");

}

获取数组某个范围的数据:(subarrayWithRange)

NSArray *array1 = @[@1,@2,@3,@4];

// 第一个参数是位置,第二个是个数

NSRang range =NSMakeRange(1, 2);

NSArray *array2 =

[array1 subarrayWithRange:range];

遍历:

// 第一种方法

1,for (int i = 0; i < array.count; i++)

// 第二种方法

2,NSEnumerator *enumerator =

[array objectEnumerator];

id ob;

while (ob = [enumerator nextObject])

{

}

// 第三种方法

3,for (id a in array)

应注意在NSArray遍历的过程中,无法修改array的数据

还有其他方法,比如componentsJoinedByString等等。

3,NSMutableArray

这是一个可变数组:

父类是NSArray(所以NSArray拥有的属性NSMutableArray也有)

可以对元素进行修改:增加,删除,修改

定义:

使用initWithObject

NSMutableArray *array = [NSMutableArray alloc]

initWithObjects:@1,@2,nil]; // 同NSArray的用法

使用initWithCapacity

NSMutableArray *array = [NSMutableArray alloc]

initWithCapacity:0]; // 后面的数字是元素的个数

如果你知道需要多少容量,那么就使用initWithCapacity:n来设置

这样的好处是:添加元素时,不需要重新分配内容。

你也什么都不做可以直接初始化

NSMutableArray *array = [NSMutableArray alloc] init];

array = [@[@1, @2, @3,] mutableCopy];

// 通过语法糖进行初始化

// 需要加mutableCopy方法

同上,这也是推荐的初始化做法:使用语法糖初始化

使用字面量语法创建出来的字符串,数组,字典对象都是不可变的

所以要想可变版本,需要复制一份,因此使用mutableCopy方法

这么做的代价是多调用一个方法,还要再创建一个对象

但是字面量语法带来的好处却远远大于上述的缺点

下面介绍其他方法

增加元素:

[array addObject:object1];

插入元素:

[array insertObject:object1 atIndex:0]:

// 在某个位置插入元素

删除:

// 看名字就知道怎么回事了

[array removeObject:object1];

// 删除最后一个元素

[array removeLastObject];

// 删除范围之内的元素

[array removeObject:object1

inRange:NSMakeRange(0, 2)];

// 删除所有元素

[array removeAllObjects];

替换和交换:

// 替换某个位置的元素

[array replaceObjectAtIndex:0

withObject:object1];

// 交换位置

[array exchangeObjectAtIndex:0

withObjectAtIndex:2];

两个数组的用法大致如上。

如何创建一个有5个元素的float数组?

利用NSNumber:

// NSNumber:是一个用来装基础类型的对象,

可以把整形,单精度,双精度,字符型等基础类型存储为对象

NSNumber *intNum = [[NSNumber alloc]

initWithInt:1];

NSNumber *floatNum = [[NSNumber alloc]

initWithInt:1.1f];

NSNumber *doubleNum = [[NSNumber alloc]

initWithInt:2.2f];

NSNumber *charNum = [[NSNumber alloc]

initWithInt:’A’];

// 使用NSNumber存储基础类型

NSNumber *float1 = [[NSNumber alloc]

initWithFloat:1.1f];

NSNumber *float2 = [[NSNumber alloc]

initWithFloat:2.2f];

NSNumber *float3 = [[NSNumber alloc]

initWithFloat:3.3f];

NSNumber *float4 = [[NSNumber alloc]

initWithFloat:4.4f];

NSNumber *float5 = [[NSNumber alloc]

initWithFloat:5.5f];

// 使用语法糖初始化

NSArray array = [@[float1, float2, float3,

float4, float5]];

// 使用时

NSLog(@"%d", [intNum intValue]);

NSLog(@"%f", [array[0] floatValue]);

使用c数组来初始化:

float a[5];

for (int i = 0; i < 5; i++)

{

a = i;

}

原文来自:菠萝心

时间: 2024-10-13 02:34:32

关于objective-c数组,这些方法你得知道的相关文章

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /

数组求和方法汇总

var arr = [1, 2, 3, 4, 5, 6];测试时我不想过度使用全局变量影响命名空间,所以没使用未声明变量.而是直接通过私有作用域设置静态私有变量,也可以用其他设计模式来限定变量作用域.因为数组对象的迭代方法也是一种遍历,所以也可以借助用来实现求和.一.利用数组对象的各迭代方法:1.array.every()查询是否有所有项都匹配的方法: 1 (function() { 2 var sum = 0; 3 4 function getSum(item, index, array) {

数组去重方法总结

这几天正在整理面试题,顺便把以前学的东西给总结一下,数组去重,我猜面试应该考的几率还是蛮高的,所以下面就让博主给讲讲iOS数组去重的几种方法. 第一种:冒泡排序,然后挨个挨个比较,这个没什么可说的,关键是麻烦,而且时间复杂度也挺大的,所以博主就不给讲了. 第二种:利用数组排序. NSArray *array = @[@"小玉",@"小小鱼",@"小玉"]; //数组去重方法---方法1 //建立一个新的的可变数组,数组长度为0 NSMutable

浅论C++数组传入方法后不能用sizeof计算到正确的数组大小

C++中我们经常会用到sizeof()来计算数组的大小 例如: 1 #include<iostream> 2 using namespace std; 3 4 void Length(int *p) 5 { 6 cout<<sizeof(p)<<" "<<sizeof(int)<<endl; 7 } 8 9 int main() 10 { 11 int n; 12 int pirce[] = {0,1,5,8,9,10,17,

IOS 开发中遍历数组的方法及比较

数组,做为一种常用的数据类型,频繁出现在编码中,其中肯定少不了对数组的遍历,本博文对数组遍历,进行一下自己的归纳,如果是大牛,一笑而过就好,互相学习,欢迎指正. 话不多说直接进入主题 首先创建一个数组 /** 获取系统的语言数组 */ NSArray *languageArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; for 循环-C语言 因为在xCode 编译中支持C 语言,

一些ES5的操作数组的方法

在ES5规范中新增了不少操作数组的方法,特此罗列一下以备使用 1. forEach循环 有点类似jQuery的each循环 [12,23,36,4,5].forEach(function(v,k){ console.log(v)   得到元素值,    12,23,36,4,5 console.log(k)   得到元素下标 ,0,1,2,3,4 }) 方便在不借助三方库的情况下遍历各类数组 2.filter过滤器 用于筛选元素 var arr = [12,23,36,4,5].filter(f

Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法

package com.ww.yzpA; public class Students { int No; int Height; } package com.ww.yzpA; public class Height { public Students getMaxHeigth(Students[] str) { Students A = new Students(); for (int i = 0; i < str.length; i++) { if (str[i].Height > A.He

javascript数组原型方法

1.javascript数组原型方法. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jstest</title> 6 </head> 7 <body> 8 <script> 9 var arr = ["1","2&q

js类数组转数组的方法(ArrayLike)

1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数

JS 操作数组的方法

1.检测数组 (判断一个值是不是数组) var color = ["red", "green", "blue"]; (1) if (color instanceof Array) {} (2) if (Array.isArray(value)) {} 2.转换方法 var color = ["red", "green", "blue"]; (1) toString()/toLocalSt