我们在学习及开发中,经常对数组进行各种操作,使用系统库提供的函数对数组操作极其方便,下面就来 介绍NSArray中常用的方法的使用:
//
// main.m
// IOS150611_ObjectiveC_NSArrayOperation
//
// Created by Peng Junlong on 15/6/11.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
//*******************************
//*
//* 数组的操作
//*
//*******************************
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//@[@"one",@"two",@"three",@"four",@"five"]表示一个数组对象
NSArray *array1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
//计算数组元素的个数
NSInteger cnt = [array1 count];
NSLog(@"cnt = %ld",cnt);
//获取指定位置的对象
id obj = [array1 objectAtIndex:2];
NSLog(@"obj = %@",obj);
//添加数组元素
//- (NSArray *)arrayByAddingObject:(id)anObject;
NSArray *array2 = [array1 arrayByAddingObject:@"six"]; //实质是创建一个新的数组对象array2来存储array1中的元素和six,不是直接修改array1
NSLog(@"array2 = %@",array2);
//用传入的数组元素添加到数组
//- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
NSArray *otherArray = [[NSArray alloc] initWithObjects:@"hello",@"world", nil];
NSArray *array3 = [array1 arrayByAddingObjectsFromArray:otherArray];
NSLog(@"array3 = %@",array3);
//用给定的分隔符链接数组中的元素,返回字符串
//- (NSString *)componentsJoinedByString:(NSString *)separator;
NSString *str = [array3 componentsJoinedByString:@"->"];
NSLog(@"str = %@",str); //结果:str = one->two->three->four->five->hello->world
//判断是否包含某个对象
BOOL ret = [array3 containsObject:@"hello"];
NSLog(@"ret = %i",ret); //结果:ret = 1
//返回两个数组中第一个相同的对象
//- (id)firstObjectCommonWithArray:(NSArray *)otherArray;
id obj2 = [array3 firstObjectCommonWithArray:otherArray];
NSLog(@"obj2 = %@",obj2); //结果:obj2 = hello
//返回传入对象在数组中第一次出现的位置
//- (NSUInteger)indexOfObject:(id)anObject;
NSArray *array4 = [NSArray arrayWithObjects:@"ne",@"two",@"three",@"one",@"two",@"one", nil];
NSUInteger index = [array4 indexOfObject:@"two"];
NSLog(@"index = %lu",index); //结果:index = 1
//返回传入对象在数组中指定范围内第一次出现的位置
//- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
NSRange range = {2,3};
index = [array4 indexOfObject:@"one" inRange:range];
NSLog(@"index = %lu",index);
//返回和传入对象相同的对象在数组中第一次出现的位置
NSString *s = [NSString stringWithUTF8String:"one"];
index = [array4 indexOfObjectIdenticalTo:s];
NSLog(@"index = %lu",index);
//判断两个数组是否相等
BOOL ret3 = [array2 isEqualToArray:array3];
NSLog(@"ret3 = %d",ret3);
//获取数组中的第一个元素
id obj3 = [array4 firstObject];
NSLog(@"obj3 = %@",obj3);
//获取数组中的最后一个元素
id obj4 = [array4 lastObject];
NSLog(@"obj4 = %@",obj4);
//==================数组的遍历=================
//方法一:下标法
NSArray *array5 = @[@"one",@"two",@"three",@"four"];
NSUInteger len = [array5 count];
for (NSUInteger i =0; i<len; i++) {
NSLog(@"%@",[array5 objectAtIndex:i]);
}
//方法二:枚举器法
//正序枚举所有对象
//生成枚举器对象
NSEnumerator *enumerator = [array5 objectEnumerator];
id obj5 = nil;
while (obj5 = [enumerator nextObject]) { // 执行一次nextObject会自动指向下一个对象的地址
NSLog(@"%@",obj5);
}
//逆序枚举所有对象
NSEnumerator *reverseEnumertator = [array5 reverseObjectEnumerator];
while (obj5 = [reverseEnumertator nextObject]) {
NSLog(@"%@",obj5);
}
//方法三:快速枚举法,for循环的一种
for(id item in array5)
{
NSLog(@"%@",item);
}
//================数组排序===============
//- (NSArray *)sortedArrayUsingSelector:(SEL)comparator; //SEL相当于C中的函数指针,选择一个函数进行排序
NSArray *array6 = @[@"one",@"two",@"three",@"four",@"five"];
NSArray *sortArray = [array6 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"sortArray = %@",sortArray);
//================数组提取===============
//提取指定范围内的子数组(连续的)
NSArray *subArray = [array6 subarrayWithRange:NSMakeRange(2, 3)];
NSLog(@"%@",subArray);
//- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] initWithIndex:0];
[indexSet addIndex:3];
[indexSet addIndex:4];
NSArray *subArray2 = [array6 objectsAtIndexes:indexSet];
NSLog(@"%@",subArray2);
//以传入的字符串整体分割字符串,返回一个数组
/*2.对称字符串(10分)
传入一个字符串,将这个字符串组合成一个新的对称字符串返回
例如:
传入:@"I love you Mery"
返回:@"I love you Mery Mery you love I"
*/
NSArray *array7 = [@"I love you Mery" componentsSeparatedByString:@" "]; //以" "分割字符串
// NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array7];
// [mutableArray removeObject:@""]; //去除空的字符串对象
// NSLog(@"mutableArray = %@",mutableArray);
NSArray *destArray = [NSArray arrayWithArray:array7];
for (NSInteger i=[array7 count]-1; i>0; i--) {
destArray = [destArray arrayByAddingObject:[array7 objectAtIndex:i]];
}
NSString *destString = [destArray componentsJoinedByString:@" "];
NSLog(@"%@",destString); //结果:I love you Mery Mery you love
/*
//2, 字符串分割 @“I #am Prime # # #Optimus”
//字符串分割函数 按照 @" #"字符串整体分割
//以字符串整体进行分割
NSArray *array8 = [@"I #am Prime # # #Optimus" componentsSeparatedByString:@" #"];
NSLog(@"array8 = %@",array8);
//以字符集合进行分割
//- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator
NSArray *array9 = [@"I #am Prime # # #Optimus" componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" #"]];
NSLog(@"array9 = %@",array9);
*/
//3有两个字符串@"I am a good girl";@"You are a bad boy"; 将这两个字符串单词,交叠,形成系的字符串 @"I You am are a a good bad girl boy"
printf("输入两个字符串:");
char str1[100] = {};
char str2[100] = {};
scanf("%[^\n]\n%[^\n]",str1,str2);
NSString *string1 = [NSString stringWithUTF8String:str1];
NSString *string2 = [NSString stringWithUTF8String:str2];
NSArray *array10 = [string1 componentsSeparatedByString:@" "]; //以" "分割字符串
NSArray *array11 = [string2 componentsSeparatedByString:@" "];
NSArray *destArray1 = [NSArray array];
NSInteger len10 = [array10 count];
NSInteger len11 = [array11 count];
NSInteger i=0;
NSInteger j=0;
while (i<len10 && j<len11) {
destArray1 = [destArray1 arrayByAddingObject:array10[i]];
destArray1 = [destArray1 arrayByAddingObject:array11[j]];
i++;
j++;
}
if (i<len10) {
while (i<len10) {
destArray1 = [destArray1 arrayByAddingObject:array10[i]];
i++;
}
}
if (j<len11) {
while (j<len11) {
destArray1 = [destArray1 arrayByAddingObject:array11[j]];
j++;
}
}
NSString *destString1 = [destArray1 componentsJoinedByString:@" "];
NSLog(@"%@",destString1);
}
return 0;
}