1.数组的概念和常用方法

     Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标取到数组中的各个元素。与字符串相同,数组也有可变和不可变数组之分。此外,数组中不可以存放基本数据类型,只能存放类的实例(对象)。如若需要将基本数据类型、结构体放入数组中,需要通过NSNumber、NSValue进行数据的“封装”;


不可变数组----NSArray

数组的初始化
NSArray*firstArray = [NSArray arrayWithObject:@"one"];
// 多个元素初始化时,注意nil作为数组的结束
NSArray*secondArray = [NSArray arrayWithObjects:@"one", @"two",nil];
NSArray*thirdArray = [NSArray arrayWithArray:secondArray];
NSArray*FourArray = [NSArray arrayWithContentsOfFile:path];

常用方法
NSArray *array= [NSArray arrayWithObjects:@"a", @"b", @"c",nil];
//  获取数组中的元素个数
NSIntegercount = [array count];
//根据下标访问对象
NSString*firstObj = [array objectAtIndex:0];
//在原来的数组上追加对象,返回一个新的数组对象
NSArray*addArray = [array arrayByAddingObject:@''ddd"];
//用指定的字符串将数组中的元素连接起来
NSString*arrayStr = [array componentsJoinedByString:@","];
//数组中是否包含某对象
BOOL isContain= [array containsObject:@"bbb"];
//查询指定对象在数组中的元素,如果没此元素,返回NSNotFound
NSIntegerindex = [array indexOfObject:@"ccc"];
//获取数组中最后一个元素
NSString*lastString = [array lastObject];

可变数组----NSMutableArray,它继承自NSArray

常用方法
//初始化,设定元素个数为5,但可以更改
NSMutableArray*mutableArray = [NSMutableArray arrayWithCapacity:5];
//向数组中添加一个元素
[mutableArrayaddObject:@"aaa"];
//向数组中指定下标插入元素
[mutableArrayinsertObject:@"ccc" atIndex:0];
//移除指定元素
[mutableArrayremoveObject:@"aaa"];
//移除指定下标的元素
[mutableArrayremoveObjectAtIndex:0];
//向数组中添加数组
[mutableArrayaddObjectsFromArray:array];
//  替换指定的下标元素
[mutableArrayreplaceObjectAtIndex:0 withObject:@"replace"];
//  移除所有对象
[mutableArrayremoveAllObjects];

遍历数组

遍历数组常规方法

NSArray *array= [NSArray arrayWithObjects:@"a", @"b", @"z",nil];
int length =[array count];
for (int i =0; i < length; i++) {
    NSString *element = [array objectAtIndex:i];
    NSLog(@"%@", element);
} //遍历的性能较低
快速枚举
for (NSString*string in array) {
    NSLog(@"found %@", string);
}  //  遍历的性能高
for (id stringin array) {
    NSLog(@"found %@", string);
}  //  当不确定数组的元素的类型时,可以选择用id

2.字典的概念和常用方法

    Foundation中的字典(NSDictionary,NSMutableDictionary)是由键--值对组成的数据集合。正如,我们在字典里查找单词的定义一样。通过key(键),查找对象value(值),key通常是字符串对象,也可以是其他任意类型对象。在一个字典对象中,key的值是唯一的。此外,字典对象的键和值不可以为空(nil),如果需要在一个字典对象中表示一个空值,可以使用NSNull对象。


不可变字典----NSDictionary
字典的初始化
NSNumber*numObj = [NSNumber numberWithInt: 100];
//  以一个元素初始化
NSDictionary*dic = [NSDictionary dictionaryWithObject:numObj forKey:@"key"];
//初始化两个元素
NSDictionary*dic = [NSDictionary dictionaryWithObjectsAndKeys:numObj,@"valueKey",numObj2, @"valueKey2", nil];
//初始化新字典,新字典包含otherDic
NSDictionary*dic = [NSDictionary dictionaryWithDictionary:otherDic];
//以文件内容初始化字典
NSDictionary*dic = [NSDictionary dictionaryWithContentsOfFile:path];

常用方法
//获取字典数量
NSIntegercount = [dic count];
//通过key获取对应的value对象
NSObject*valueObj = [dic objectForKey:@"key"];
//将字典的key转成一个枚举对象,用于遍历
NSEnumerator*enumerator = [dic keyEnumerator];
//获取所有键的集合
NSArray *keys= [dic allKeys];
//获取所有值的集合
NSArray*values = [dic allValues];

可变字典----NSMutableDictionary继承自NSDictionary
常用方法
//初始化一个空的可变字典(注意以下代码前后无关联性)
NSMutableDictionary*dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"key1", @"v2", @"key2", nil];
NSDictionary*dic3 = [NSDictionary dictionaryWithObject:@“v3” forKey:@"key3"];
//向字典2对象中添加整个字典对象3
[dic2addEntriesFromDictionary:dic3];
//向字典2对象中追加一个新的key3和value3
[dic2 setValue:@"value3"forKey:@"key3"];
//初始化一个空的可变字典
NSMutableDictionary*dic1 = [NSMutableDictionary dictionary];
//将空字典1对象的内容设置为字典2对象相同
[dic1setDictionary:dic2];
[dic1removeObjectForKey:@"key1"];//将字典中key1对应的值删除
NSArray *array= [NSArray arrayWithOjbects:@"key1", nil];
[dic2removeObjectsForKeys:array];//根据制定的数组(key)移除字典2的内容
[dic1removeAllObjects]; //  移除字典所有对象

遍历字典
快速枚举
for (id key indic) {
    id obj = [dic objectForKey:key];
    NSLog(@"%@", obj);
}
一般的枚举
NSArray *keys= [dic allKeys];
int length =[keys count];
for (int i =0; i < length ; i++) {
    id key = [keys objectAtIndex:i];
    id obj = [dic objectForKey:key];
    NSLog(@"%@", obj);
}
通过枚举类型枚举
NSEnumerator*enumerator = [dic keyEnumerator];
id key =[enumerator nextObject];
while(key) {
    id obj = [dic objectForKey:key];
    NSLog(@"%@", obj);
    key = [enumerator nextObject];
}

2.集合概念和常用方法

       在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个,并且它也分为可变和不可变对象(可变集合对象,NSMutableSet)。


不可变集合----NSSet
NSSet的初始化
//类似与数组的构建,直接创建一个集合
NSSet *set1 =[[NSSet alloc] initWithObjects:@"one", @"two", nil];
//通过数组的构建集合
NSArray *array= [NSArray arrayWithObjects:@"1", @"2", @"3",nil];
NSSet *set2 =[[NSSet alloc] initWithArray:array];
//通过已有集合构建集合
NSSet *set3 =[[NSSet alloc] initWithSet:set2];
NSSet的常用方法(BOOL )
//集合3中对象的个数
int count =[set3 count];
//以数组的形式返回集合3中所有的对象
NSArray*allObjects = [set3 allObjects];
//返回集合3中的任意一个对象
id object =[set3 anyObject];
//集合4中是否包含内容为2的字符串对象,如果包含返回YES,否则返回NO
BOOL isContain= [set4 containsObject:@"2"];
//集合4中与集合2中是否存在有相同元素的对象,如果有返回YES,否则为NO
BOOLisIntersect = [set4 intersectsSet:set2];
//集合4与集合5的元素是否完全匹配,如果匹配返回YES,否则为NO
BOOL isEqual =[set4 isEqualToSet:set5];
// 集合4是否是集合5的子集合,如果是返回YES,否则为NO
BOOL isSubset= [set4 isSubsetOfSet:set5];
//创建一个新的集合2,集合2有两个对象(a和b)
NSSet *set1 =[NSSet setWithObjects:@"a", nil];
NSSet *set2 =[set1 setByAddingObject:@"b"];
//通过已有集合7和集合8,创建一个新的集合9
NSSet *set7 =[NSSet setWithObjects:@"a", nil];
NSSet *set8 =[NSSet setWithObjects:@"z", nil];
NSSet *set9 =[set7 setByAddingObjectsFromSet:set8];
//通过已有的集合10和数组对象,创建一个新的集合11
NSArray *array= [NSArray arrayWithObjects:@"a", @"b", @"c",nil];
NSSet *set10 =[NSSet setWithObjects:@"z", nil];
NSSet *set11 =[set10 setByAddinObjectsFromArray:array];

可变集合----NSMutableSet,它继承自NSSet
常用方法
//创建一个空的集合(注意以下代码前后无关联性)
NSMutableSet*set1 = [NSMutableSet set];
NSMutableSet*set2 = [NSMutableSet setWithObjects:@"1", @"2", nil];
NSMutableSet*set3 = [NSMutableSet setWithObjects:@"a", @"2", nil];
//集合2“减去”集合3中的元素,集合2最后元素只有1,且为1
[set2minusSet:set3];
//集合2与集合3中的元素的交集,集合2最后元素只有1个,且为2
[set2intersectSet:set3];
//集合2与集合3中的元素的并集,集合2最后元素只有3个,且为1,2,a
[set2unionSet:set3];
//将空集合1设置为集合3中的内容
[set1setSet:set3];
//根据数组的内容删除集合中的对象
[set2addObjectsFromArray:array];
[set2removeObject:@"1"];
[set2removeAllObjects];