本文主要讲解的是不可变数组NSArray可变数组NSMutableArray集合NSSet可变集合NSMutableSet详细使用方式包括类型和值之间的转换
文章是博主原创,转载请标明出处http://blog.csdn.net/werctzzz/article/details/70928738
首先来一个集合的详细方法~
#pragma mark NSSet 不可变集合
// NSSet和NSArray有相似之处,都是存储不同的对象的地址
// 但是NSArray是有序的集合,NSSet是无序的集合。
// 在介绍完了NSSet就讲讲数组~
// 基本知识:集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。
// 1.集合的初始化
NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSLog(@"%ld",[set count]); //集合中对象的个数
// 2.集合的判断
// 2.1判断集合中是否拥有@“two”
BOOL boolset1 = [set containsObject:@"two"];
// 2.2判断两个集合是否相等
NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
BOOL boolset2 = [set isEqualToSet:set2];
//判断set是否是set3的子集合
NSSet * set3 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
BOOL boolset3 = [set isSubsetOfSet:set3];
// 3.通过数组来初始化集合
// 3.1数组转换为集合
NSArray * changeArray1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSSet * changeSet = [[NSSet alloc] initWithArray:changeArray1];
// 3.2集合转换为数组
NSArray * changeArray2 = [changeSet allObjects];
#pragma mark NSMutableSet 可变集合
// 1.可变集合初始化
NSMutableSet * MutableSet = [[NSMutableSet alloc] init];
// 2.内部元素的操作
// 2.1增加元素
[MutableSet addObject:@"one"];
[MutableSet addObject:@"two"];
[MutableSet addObject:@"two"];
// 2.2删除元素
[MutableSet removeObject:@"two"];
[MutableSet removeAllObjects];
// 3.集合的互相添加
// 3.1将一个不可变集合中的元素添加到可变集合中来,如果有重复,只保留一个
NSSet * addSet = [[NSSet alloc] initWithObjects:@"two",@"three",@"four", nil];
[MutableSet unionSet:addSet];
// 3.2删除set中与set2相同的元素
[MutableSet minusSet:addSet];
// 4.指数集合(索引集合)NSIndexSet
NSIndexSet * indexSet1 = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 3)]; //集合中的数字是123
// 5.根据集合提取数组中指定位置的元素
NSArray * arrayout1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray * newArray1 = [arrayout1 objectsAtIndexes:indexSet1]; //返回@"two",@"three",@"four"
// 6.可变指数集合NSMutableIndexSet
NSMutableIndexSet * indexSet2 = [[NSMutableIndexSet alloc] init];
[indexSet2 addIndex:0];
[indexSet2 addIndex:3];
[indexSet2 addIndex:5];
// 7.通过集合获取数组中指定的元素
NSArray * arrayout2 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];
NSArray * newArray2 = [arrayout2 objectsAtIndexes:indexSet2]; //返回@"one",@"four",@"six"
接下来就是数组的详细使用方式~
#pragma mark NSArray 不可变数组
NSString *str1 = @"1";
NSString *str2 = @"2";
NSString *str3 = @"3";
//NSArray 常用方法
// 1. 创建对象,初始化
NSArray *arry1 = [[NSArray alloc]initWithObjects:str1,str2,str3, nil];
NSLog(@"%@", arry1);
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
// 2. 获取数组中的对象 根据数据在数组的位置 index
NSString *obj = arry1[2]; // 注意类型要正确,不然会发生崩溃,如果类型不一致可以先转换
NSLog(@"%@", obj);//1
NSLog(@"%@", arry1[2]);//2
NSLog(@"%@", [arry1 objectAtIndex:1]);//3
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
// 3. 获取数组长度(元素个数)
NSLog(@"%ld", [arry1 count]);
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
// 4.查询某个对象的下标
NSArray *arry2 = [NSArray arrayWithObjects:@"赵",@"张",@"靳",@"张",@"宋",nil];
NSLog(@"%ld", [arry2 indexOfObject: @"靳"]);
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
#pragma mark NSMutableArray 可变数组
// 1.初始化创建
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"张三",@"李四",@"王五",@"孙二",@"赵六",@"周七", nil];
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}
// ⭐️初始化需要注意的地方
// ①[NSMutableArray arrayWithCapacity:6]
// 初始化可变数组对象的长度,如果后面代码继续添加数组超过长度6以后NSMutableArray的长度会自动扩充,6是自己可以设置的颗粒度。
// ②[array addObject:...]
// 向可变数组尾部添加数据对象。
// ③[array addObjectsFromArray:..]
// 向可变数组尾部添加一个数组对象。
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
// 2.对数组内容的操作
// 2.1添加元素
[array addObject:@"钱八"]; //添加一个 @"钱八"进去array里面
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}//钱八添加到array里面,在最后一个位置
// 2.2插入元素
[array insertObject:@"陈一" atIndex:2];
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}//把 陈一 插入到指定下标位置,下标为2
// 2.3删除元素
[array removeObject:@"孙二"];//把 孙二 从数组里删除
[array removeObjectAtIndex:5];//把下标为5的删除
// 重温一下上一篇博客学的 NSRange 设置一个范围为 0 到 3 之间。
NSRange range = NSMakeRange(0,3);
[array removeObject:@"李四" inRange:range];//按范围删除
// ⭐️删除操作时候要注意的地方
// ①[array removeObject:(id)] 删除数组中指定元素,根据对象isEqual消息判断。
// ②[array removeObjectAtIndex:(NSUInteger)] 删除数组中指定脚标索引的数据。
// ③[array removeObjectsInArray:(NSArray *)] 删除一个数组的元素。
// ④[array removeObjectIdenticalTo:(id)] 删除数组中指定元素,根据对象的地址判断
// ⑤[array removeObjectIdenticalTo:(id) inRange:(NSRange)] 在指定范围内删除指定的元素。
// 遍历查看结果
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}
// 2.4替换元素
[array replaceObjectAtIndex:4 withObject:@"坑爹"];//给据下标把内容替换
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}
// 2.5交换指定位置元素
[array exchangeObjectAtIndex:2 withObjectAtIndex:4];//把二和四的下标元素替换
for (int i = 0; i < [array count]; i++){
NSLog(@"%d%@", i, [array objectAtIndex:i]);
}