最近這段時間,把博客落下了,事情太多,以至于總是給自己各種借口去把事情往后推。這樣很不好,還是應該讓自己有更強一些的自制力,耐得住寂寞才能走的更遠。今天想先把NSArray這塊的內容做一些總結,也像NSString一樣,作為一個工具博客來用吧。
一:NSArray的初始化
NSArray的初始化一般有一下這樣幾種方式
NSArray *array1 = @[]; // 最簡便的方式
NSArray *array2 = [NSArray new]; // 慣用方式
NSArray *array3 = [[NSArray alloc]initWithObjects:@"", nil]; //
NSArray *array4 = [[NSArray alloc]initWithArray:array1]; //根據一個已有的數組定義一個新的數組
二:NSArray的一些常用小技巧
1:用一個分隔符將整個array組合成一個NSString
NSArray *array = @[@"I",@"??",@"U"]; // 最簡便的方式
// 將array數組轉換為string字符串
NSString *string = [array1 componentsJoinedByString:@" "];
將會輸出“I ?? U”。
2:比較一個元素是否存在于當前數組當中
NSArray *array = @[@"I",@"??",@"U"]; // 最簡便的方式
BOOL isInclude = [array containsObject:@"I"];
isInclude的值是YES
3:判斷兩個數組是否完全一致
NSArray *array1 = @[@"1",@"2"];
NSArray *array2 = @[@"1",@"2"];
NSArray *array3 = @[@"1",@"2",@"3"];
BOOL isSame1 = [array1 isEqualToArray:array2];
BOOL isSame2 = [array1 isEqualToArray:array3];
isSame1為YES ,isSame2 為NO
4:已知數組中有一個元素,想要知道這個元素所在的最小下標
NSArray *array1 = @[@"1",@"2",@"3",@"1",@"2"];
NSInteger index = [array1 indexOfObject:@"1"];
NSInteger indexWithRange = [array1 indexOfObject:@"1" inRange:NSMakeRange(2, 2)];
NSLog(@"%ld ____ %ld",(long)index,(long)indexWithRange);
輸出“0 ____ 3”
5:讓數組倒序遍歷,可以用于獲取一個新的倒序數組
NSArray *array1 = @[@"1",@"2",@"3",@"1",@"2"];
NSArray *array2 = [[array1 reverseObjectEnumerator] allObjects];
NSLog(@"%@",array2);
輸出的是【2,1,3,2,1】
6:利用sortedArray來將數組排序,排序方式有很多種,Function【函數】,Comparator【比較】,Selector【選擇器】
NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"4",nil];
NSComparator cmptr = ^(id obj1, id obj2){
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
};
NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];
NSString *arrayStr = [array componentsJoinedByString:@""];
NSLog(@"%@",arrayStr);
輸出【1234456781213152028】
7:從數組中截取一段成為一個新的數組
NSArray *array1 = @[@"1",@"2",@"3",@"1",@"2"];
NSArray *array2 = [array1 subarrayWithRange:NSMakeRange(0, 2)];
NSLog(@"%@",array2);
輸出array2 : @[@"1",@"2"]
8:使用enumerateObjectsUsingBlock快速遍歷數組
NSArray *array1 = @[@"1",@"2",@"3",@"1",@"2"];
NSMutableString *str = [NSMutableString new];
[array1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[str appendString:(NSString *)obj];
}];
NSLog(@"%@",str);
輸出【12312】
9:一些關于NSArray的常用屬性
NSArray *array1 = @[@"1",@"2",@"3",@"1",@"2"];
NSInteger count = array1.count; //數組的組成元素個數
NSString *str1 = array1.firstObject; //第一個元素
NSString *str2 = array1.lastObject; //最后一個元素
三:NSMutableArray
1:可變數組的增加
- (void)addObject:(ObjectType)anObject; // 增加一個元素到數組的最后面
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray; // 將整個新的數組加到原來的數組中
2:可變數組的插入
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index; // 插入一個元素到數組的指定位置
- (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet *)indexes; // 插入一個數組到原來數組的指定位置
3:可變數組的移除
- (void)removeLastObject; // 移除數組的最后一個元素
- (void)removeObjectAtIndex:(NSUInteger)index; // 移除指定位置的元素
- (void)removeAllObjects; // 移除數組中的所有元素
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range; // 移除指定范圍內的指定元素
- (void)removeObject:(ObjectType)anObject; // 移除指定的元素
- (void)removeObjectsInArray:(NSArray<ObjectType> *)otherArray; // 移除選定數組所包含的元素
- (void)removeObjectsInRange:(NSRange)range; // 移除指定范圍內的所有元素
4:可變數組的替換
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject; // 替換指定位置的元素
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; // 將數組的idx1和idx2位置上的元素進行互換
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray<ObjectType> *)otherArray range:(NSRange)otherRange; //用一個新的數組的一部分替換指定范圍內的數組
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray<ObjectType> *)otherArray;//用一個新的數組替換指定范圍內的數組