您的位置:首页 > 产品设计 > UI/UE

day4_2: 数组NSArray NSMutableArray、值对象NSNumber、NSValue

2015-08-21 18:04 459 查看
数组-有序集合

IOS中存放数据的容器类都称为集合(collection)

数组是有序结合 只能存放对象

数组有下标(index)的概念,靠index来索引元素,下标从0开始

数组分不可变数组(NSArray)和可变数组(NSMutableArray)

@[@"abc",@"erf"] 这个语法糖返回的是不可变数组

不可变数组里的元素只可以读取,不可以写入

涉及知识点:

1、数组的初始化,建议使用语法糖

2、取数组中元素个数方法 Count 返回值为无符号长整型

3、访问数组中元素:str = [arr objectAtIndex:2],类似于str = arr[2];

4、可变数组元素的初始化:

实例方法: initWithObjects:

类方法: arrayWithObjects:

5、可变数组中添加元素:addObject:

6、可变数组中指定位置插入元素:insertObject:@"bobo" atIndex:0

7、可变数组中删除元素:removeObject:

8、可变数组中替换元素:replaceObjectAtIndex:1 withObject:@"kevin"

9、可变数组中交换两个元素的位置:exchangeObjectAtIndex:0 withObjectAtIndex:1

10、数组元素遍历的两种方法

11、把基本类型转换为对象类型 numberWith开头,如:

numberWithBool;

numberWithFloat;

numberWithInt;

numberWithChar;

...

12、对象类型转换成基本数据类型

boolValue;

intValue;

floatValue;

doubleValue;

rangeValue;

...·

13、NSNumber 语法糖

NSNumber * num5 = [NSNumber numberWithInt:8];

NSNumber * num6 = @8; //将int类型转换成NSNumber对象

NSNumber * num7 = @2.3; //将double类型转换成NSNumber对象

NSNumber * num8 = @YES; //将BOOL类型转换成NSNumber对象

NSNumber * num9 = @'c'; //将char类型转换成NSNumber对象

14、结构体转换成对象类型:

NSValue * value = [NSValue valueWithRange:range]

15、对象类型转换为结构体类型

NSRange range2 = [value rangeValue];

NSLog(@"range2 = %@",NSStringFromRange(range2));

16、字符串以某个字符分隔开,然后存储到数组中

NSString *str5 = @"abc,def,ghi";

NSArray *arr5 = [str5 componentsSeparatedByString:@","];

17、数组转换为字符串(拼接):

str5 = [arr5 componentsJoinedByString:@"."];

18、删除数组中的元素:

删除数组中的一个元素:

removeObjects:

删除数组中多个元素,删除的多个元素在另一个数组里:

removeObjectsInArray:

NSArray * delArr = @[p4,p5,p6];

[mArr5 removeObjectsInArray:delArr];

main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {

//-----1.1--初始化方法创建数组-----
// nil相当于\0的作用,表示访问到这里就结束了,不再访问后面的数组元素
NSArray * arr = [[NSArray alloc]initWithObjects:@"zero",@"hour",@"学辉", nil];
NSLog(@"%@",arr);

NSArray * arr2 = @[@"Frank",@"bobo",@"Duke"];
NSLog(@"%@",arr2);

NSArray * arr3 = [NSArray arrayWithObjects:@"张三",@"李四",@"王五", nil];
NSLog(@"%@",arr3);

//不常用的方法:
NSArray * arr4 = [NSArray arrayWithObject:@"tom"];
NSLog(@"%@",arr4);

//-----1.2-- 获取数组元素个数的方法:-------
NSUInteger arrCount = [arr2 count];
//int count = (int)[arr2 count]; //错误写法,这样会损失精度
NSLog(@"%lu",arrCount);

//-----1.3--访问数组元素,arr[2]等价于下面的代码-------
// 获取对应索引的元素
NSString *str = [arr objectAtIndex:2];
NSLog(@"%@",arr[2]);//不安全
NSLog(@"%@",str);

//-----2.1--可变元素的初始化-------
NSMutableArray *mArr = [[NSMutableArray alloc]initWithObjects:@"zero",@"hour", nil];
NSLog(@"%@",mArr);

//-----2.2--可变数组中元素的添加-------

//可以接受自己所有特有的消息,添加数组元素(特有的方法)
[mArr addObject:@"bobo"];
NSLog(@"%@",mArr);

//在数组mArr的第0个位置添加@"bobo"元素。
[mArr insertObject:@"bobo" atIndex:0];
NSLog(@"%@",mArr);

//-----2.3--删除数组元素(由于后面的代码会用到mArr,这里先注释起来)-------
//    [mArr removeObject:mArr[0]];
//    [mArr removeObject:@"bobo"];
//    NSLog(@"%@",mArr);

//-----2.4--替换元素  这里的1是指数组的下标-------
[mArr replaceObjectAtIndex:1 withObject:@"kevin"];
NSLog(@"%@",mArr);

//-----2.5--交换两个元素-------
[mArr exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"%@",mArr);

//-----2.6--可变数组元素的输出------
NSMutableArray * names = [NSMutableArray arrayWithObjects:@"张三",@"李四",@"王五", nil];
NSLog(@"names = %@",names);

//第一种遍历
for (int i=0; i<[names count]; i++) {
NSLog(@"%@",names[i]);
}

//第二种遍历
for (NSString * obj in names) {
NSLog(@"%@",obj);
}

//*************************
//第四部分
//*************************

//值对象
//-------NSNumber----
//-----3.1--把基本类型转换为对象类型--------
/*
+ numberWithInt:
+ numberWithDouble:
- intValue
- doubleValue
*/
NSNumber * num1 = [NSNumber numberWithBool:YES];
NSNumber * num2 = [NSNumber numberWithChar:'a'];
NSNumber * num4 = [NSNumber numberWithFloat:3.5];
NSNumber * num3 = [NSNumber numberWithDouble:2.3];

//-----3.2--OC数组当中不能存储基本数据类型-------

//    NSArray *arr = @[YES,2.3,5];//这样存储是错误的,OC数组当中不能存储基本数据类型

NSArray *nArr = @[num1,num2,num3,num4];
NSLog(@"%@",nArr);

//-----3.3--对象类型转换成基本数据类型-------

BOOL type1 = [num1 boolValue];
char type2 =  [num2 charValue];
float type3 = [num3 floatValue];
double type4 = [num4 doubleValue];
//    NSArray * nArr2 = @[type1,type2,type3,type4];
NSLog(@"%@",nArr);
NSLog(@"%d, %c, %.2f, %.2f",type1,type2,type3,type4);

//-----3.4--NSNumber的语法糖-------

NSNumber * num5 = [NSNumber numberWithInt:8];
NSNumber * num6 = @8; //将int类型转换成NSNumber对象
NSNumber * num7 = @2.3;   //将double类型转换成NSNumber对象
NSNumber * num8 = @YES;   //将BOOL类型转换成NSNumber对象
NSNumber * num9 = @'c';   //将char类型转换成NSNumber对象
NSLog(@"num5=%@, num6=%@, num7=%@, num8=%@, num9=%@ ",num5,num6,num7,num8,num9);

//-----4--NSValue-------
/*
+ valueWithRange:
+ valueWithPointer:
- rangeValue
- pointerValue
*/
//-----4.1--valueWithRange 结构体转换成对象类型-------

//封装结构体为对象类型  结构体类型转换为对象目的是为了放到数组里
NSRange range = NSMakeRange(1, 3); //实例化了一个结构体 初始化了一个结构体
NSValue * value = [NSValue valueWithRange:range]; //转换成对象类型
NSLog(@"%@",value);

//-----4.2--rangeValue对象类型转换为结构体-------

NSRange range2 = [value rangeValue];
NSLog(@"%@",NSStringFromRange(range2));

//-----4.3--componentsSeparatedByString: 字符串转换为数组---------

//将字符串中以某个字符分隔,分隔后的字符串放在数组当中
NSString *str5 = @"abc,def,ghi";
NSArray *arr5 = [str5 componentsSeparatedByString:@","];
NSLog(@"%@",arr5);

//-----4.4---componentsJoinedByString: 数组转换为字符串---------

str5 = [arr5 componentsJoinedByString:@"."];
NSLog(@"%@",str5);

//-----4.5--删除数组中指定素--------

Person *p1 = [[Person alloc]init];
Person *p2 = [[Person alloc]init];
Person *p3 = [[Person alloc]init];
Person *p4 = [[Person alloc]init];
Person *p5 = [[Person alloc]init];
Person *p6 = [[Person alloc]init];

//removeObject:删除可变数组中的指定元素
NSMutableArray *mArr5 = [NSMutableArray arrayWithObjects:p1,p2,p3,p4,p5,p6, nil];
[mArr5 removeObject:p2];
NSLog(@"mArr5 = %@",mArr5);
for (int i=0;i<5;i++) {
NSLog(@">> %@",mArr5[i]);
}

NSArray * delArr = @[p3,p4,p5,p6];
[mArr5 removeObject:delArr];
NSLog(@"---%@",mArr5);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: