OC学习五之集合对象

NSArray不可存放基本数据类型,只能存放类的实例,如果需要将基本数据类型、结构体放入到数组的话,需要通过NSNumber、NSValue进行数据封装,同时不能在NSArray中存储nil

NSString *str1 = @"zhangsan";
NSString *str2 = @"lisi";
NSString *str3 = @"wangwu";
NSArray *array1 = [[NSArray alloc] initWithObjects:str1,str2,str3,nul];
//打印的时候调用的是description方法,相当于 array1.description
NSLog(@"%@",array1);

initWithObjects方法最后一个值为nil,nil是空指针的意思,和Java中的null一样,为什么创建NSArray的时候最后一个值为空?
这个是和C语言场景类似,C语言中,字符串结尾符为‘/0’,那么这个地方NSArray最后一个元素nil则是标记NSArray结束。
description方法和Java中的toString仿发一样,我们也可以重写这个方法。

NSArray *array2 = [NSArray arrayWithArray:array1];

使用下标访问元素

NSString *str1 = [array1 objectAtIndex:0];

获取数组的大小,返回的是一个无符号数组

NSUInteger count = [array1 count];

是否包含某一个元素,判断的是指针对象,不是对象中的值

BOOL isContains = [array1 containsObject:@"zhangsan"];

找到一个元素在数组中的下标

NSUInteger index = [array1 indexOfObject:@"zhangsan"];
if(index == NSNotFound){
    //没有找到
}else{
    //找到了
}

NSNotFound是系统常量,定义为Long类型的最大值

使用指定的连接符连接数组中的所有元素,只有数组中的元素是字符串时,才可以用

NSString *content = [array1 componentsJoinedByString:@";"];

在数组尾部增加一个元素,需要返回一个新的数组,因为原数组是不可变的

NSArray *array3 = [array1 arrayByAddingObject;@"zhaoliu"];

数组的遍历,第二种方法和Java中的快速遍历一样

for(int i = 0;i<array1.count;i++){
    NSString *str = [array objectAtIndex:i];
}

for(NSString *str in array1){
    
}

Xcode4.4之后新增了款速创建NSArray的方式,这种方法快且方便,可以直接用下标去获取元素

NSArray *array5 = @[str1,str2,str3];
NSString *s = array5[0];

NSMutableArray类

NString是不可变的,NSMutalbeArray是可变的,可变类的属性就是可以进行增删改查的操作

NSDictionary

和Java中Map类很像,OC中叫字典由键值对key-value构成的数据集合,字典是无序的,Java中的Map也是无序的,通过hash值去索引

创建方法

NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangwang",nil];
NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"lihaha",nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li",nul];

NSDictionary类基于NSArray的,其他的和Java中的Map差不多,一般都是key-value的形式,

添加元素

NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];

获取所有元素的key

NSArray *allKeys  = [dict allKeys];

获取所有元素的Value,可能为二位数组

NSArray *allValues = [dict allValues];

通过key获取value

NSArray *values = [dict objectForKey:@"zhang"];

NSDictionary的快速创建方式和访问方式

NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};

NSArray *array4 = dict3["zhang"];

NSMutableDictionary 可变字典

创建可变字典、添加元素,可以指定其大小,当容量满的之后,会自动扩容

NSMutalbeDictionary *md1 = [NSMutableDictionary alloc] initWithCapacity:3];
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lisi",nil];

//--------添加元素---------
[md1 setObject:array1 forKey:@"zhang"];

NSMutableDictionary *md2 = [[NSMutableDictionary alloc]initWithCapacity:3];
[md2 addEntriesFromDictionary:md1];

删除元素

[md1 removeObjectForKey:@"zhang"];//以key删除
[md1 removeAllObjects];//删除所有元素
[md1 removeObjectsForKeys:array1];//以value删除

遍历字典

//快速遍历
for(NSString *key in md1){
    NSAarray *values = [md1 objectForKey:Key];
    for(NSString *v in values){
    }
}
//普通遍历
NSArray *allkey = [md1 allkeys];
for(int i=0;i<allKey.count;i++){
    NSArray *value = [md1 objectForKey:allKey[i]];
}

NSSet&NSMutableSet
用法和NSArray非常相似,NSArray的区别在于NSSet对象不能放重复数据,并且也是无序的。

猜你喜欢

转载自blog.csdn.net/qq_34198206/article/details/84784841
今日推荐