创建一个OC的数组
#import
int main(int argc,const char * argv[])
{
//NSArray *arr = [ [NSArray alloc] init] ; 不会这样写,因为OC中的数组一旦创建好就是不可变的,所以创建这样的数组没有任何意义
NSArray *arr = [NSArray arrayWith0bject:@"lnj"]; //它会自动根据你传入的参数判断数组中中应该放什么数据类型
//OC中的数组打印出来的话是以"("")"圆括号包起来的
//数组中的nil是结束符,要是提前出现nil打印的时候会提前结束
NSArray *arr = [NSArray arrayWithobjects:@"lnj", @"Lmj" ,@"jjj", @"cp",nil] ;
return 0;
}
虽然只能存 放OC对象,但是我们可以把其他类型的对象先转换成OC对象再进行存储
Person *p = [Person new];
NSObject *obj = [NSObject new] ;
NSArray *arr = [NSArray arrayWithobjects:p, obj, @"Inj", nil]; //一个数组存放了三种不同的类型,但是都是OC的对象
NSLog(@"arr = %@", arr); //尝试打印上面的数组
NSLog(@"count = %lu", [arr count]); //打印数组元素个数
NSLog(@"last = %@",[arr last0bject]); //打印数组最后一个元素
NSLog(@"first = %@",[arr firstObject]); //打印数组第一个元素
NSLog(@"arr[1] = %@",[arr objectAtIndex:1]); //打印数组任意位置,根据索引打印
NSArray *arr = [NSArray arrayWithobjects:@"lnj", @"Lmj", @"jjj", @"zs",nil];
if([arr contains0bject:@"zs"]) //判断数组中是否包含某个元素,返回bool
{
NSLog(@"arr中包含zs");
}else
{
NSLog(@"arr中不包含zs");
}
//创建数组简写
NSString *str = @"Lnj";
//NSArray *arr = [NSArray arrayWithobjects:@"lnj", @"lmj", @"jjj",nil];
NSArray *arr = @[@"Inj", @"lmj", @"jj"];
//获取数组元素的简写
//NSLog(@"%@",[arr objectAtIndex:0]);
NSLog(@"%@", arr[0]);
#import
int main(int argc, const char * argv[])
{
NSArray *arr = @[@"lnj", @"Lmj", @"jjj"];
//常规遍历
for (int i = 0; i < arr.count; ++i)
{
NSLog(@"arr[%i] = %@", i, arr[i]);
}
//如果是0C数组可以使用0C中的增强for循环来遍历
//逐个取出arr中的元素,将取出的元素赋值给obj
//注意: obj的类型可以根据数组中元素的类型来写,不一定要写NSObject
//for (NSObject *obj in arr) {
for (NSString *obj in arr)
{
NSLog(@"obj = %@", obj);
}
//使用0C数组的迭代器来遍历
//每取出一个元素就会调用一次block
//每次调用block都会将当前取出的元素和元素对应的索引传递给我们
// obj就是当前取出的元素,idx就是 当前元素对应的索引
// stop用于控制什么时候停止遍历,可以不使用,如果不使用,循环就一直到数组结束
[arr enumerate0bjecitsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if(idx == 1)
{
*stop = YES;
}
NSLog(@"obj = %@,idx = %Lu", obj, idx);
}];
return 0;
Person *p1 = [Person new] ;
Person *p2 = [Person new] ;
Person *p3 = [Person new] ;
Person *p4 = [Person new] ;
NSArray *arr = @[p1, p2, p3, p4, @"lnj"];
/*
[arr enumerate0bj ectsUs ingBlock: ^(Person *obj, NSUInteger idx, BOOL * stop) {
[obj say];
}];
*/
//如果使用0C数组存储对象,可以调用0C数组的方法让数组中所有的元素都执行指定的方法
//注意点:如果数组中保存的不是相同类型的数据,并且没有相同的方法,那么会报错
[arr make0bjectsPerformSelector :@selector(say)] ; //一行代码实现上面的for循环,这个方法给数组中的每个对象都发送消息,让他们调用say方法
假如是集体调用一个有参数的方法,就像下面这样
// withobject: 需要传递给调用方法的参数
[arr makeObjectsPerformSelector :@selector(sayWithName:)withobject:@"Lnj"];
SEL参数:
@selector(functionName:)
如果函数是没有参数的,那就是不要带冒号,@selector(functionName)
用于传入函数名作为参数。
OC里面只要哪个方法的参数没有带*,那么就是枚举的参数。
#import
#import "Person. h"
int main(int argc, const char * argv[])
{
NSArray *arr = @[@10, @20, @5, @7, @15];
NSLog (@"排序前: %@", arr);
//注意:想使用compare方法对数组中的元素进行排序,那么数组中的元素必须是Foundation框架中的对象,也就是说不能是自定义对象。默认是升序
NSArray *newArr = [arr sortedArrayUsingSelector : @selector(compare:)];
NSLog (@"排序后: %@",newArr);
Person *p1 = [Person new] ;
p1.age = 10;
Person *p2 = [Person new] ;
p2.age = 20;
Person *p3 = [Person new] ;
p3.age = 5;
Person *p4 = [Person new] ;
p4.age = 7;
NSArray *arr = @[p1, p2, p3, p4];
NSLog (@"排序前: %@", arr);
//按照人的年龄进行排序
//不能使用compare:方法对自定义对象进行排序
//NSArray *newArr = [arr sortedArrayUsingSelector :@selector(compare:)];
NSArray *newArr = [arr sortedArrayWithOptions :NSSortStable usingComparator: ^NSComparisonResult(Person *0bj1, Person *0bj2) {
//每次调用该block都会取出数组中的两个元素给我们
//NSLog(@"obj1 = %@,obj2 = %@", obj1, obj2);
return obj1.age > obj2.age; //自己在函数内部对我们自定义类型的参数进行判断方式的定义
//这里和C++里面的适配器有点像
}];
NSLog(@"排序后: %@", newArr);
return 0 :
}
NSArray *arr = @[@"lnj", @"Lmj", @"jj"];
//将数组中的字符串用**连接成一个完整的字符串
NSString *str = [arr componentsJoinedByString:@"**"];
NSLog(@"str = %@", str);
//通过一个字符串生成一个数组
//字符串切割
NSString *str = @"Lnj**lmj**jj";
NSArray *air = [str componentsSeparatedByString :@"**"] ; //将字符串以**为代表,分割成数组里面的元素
NSLog(@"arr = %@", arr);
#import
int main(int argc,const char * argv[])
{
NSArray *arr = @[@"lnj", @"Lmj", @"jjj"];
// 1.将数组写入到文件中
//其实如果将一个数组写入到文件中之后,本质是写入了一个XML文件
//在i0S开发中一般情况下我们会将XML文件的扩展名保存为plist
BOOL flag = [arr writeToFile:@"/Users/ xiaomage/Desktop/abc. plist" atomically:YES];
NSLog(@"flag = %i", flag);
//注意:writeToFile只能写入数组中保存的元素都是Foundation框架中的类创建的对象,如果保存的是自定义对象那么不能写入
// 2.从文件中读取一个数组
NSArray *newArray = [NSArray arrayWithContents0fFile:@"/Users/xiaomage/Desktop/abc. plist"];
NSLog (@"%@", newArray) ;
return 0;
}
#import
int main(int argc, const char * argv[])
{
//创建一个空得数组
NSMutableArray *arrM = [NSMutableArray array] ;
NSLog (@"%@",arrM);
//如何添加
[arrM add0bject:@"lnj"];
//将指定数组中的元素都取出来,放到arrM中
//并不是将整个数组作为一个元素添加到arrM中
[arrM addobjectsFromArray:@[@"lmj", @"jj"]];
//注意:以下是将整个数组作为一个元素添加
//[arrM add0bject:@[@"Lmj", @"jj"l];
NSLog (@"%@", arrM) ;
//如何插入
[arrM insert0bject:@"xcq" atIndex:1];
NSLog(@"%@",arrM);
NSRange range = NSMakeRange(2, 2);
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange: range];
//插入- -组数据,指定数组需要插入的位置,和插入多少个
[arrM insert0bjects:@[@"A", @"B"] atIndexes:set] ;
NSLog(@"%@",arrM) ;
//如何删除
[arrM remove0bjectAtIndex:0];
NSLog(@"%@",arrM) ;
[arrM removeLast0bject];
NSLog(@"%@",arrM);
[arrM remove0bject:@"A"];
NSLog(@"%@",arrM);
//如何替换
[arrM replace0bj ectAtIndex:1 withobject:@"M"];
NSLog (@"%@", arrM);
arrM[0] = @"ZS";
NSLog(@"%@", arrM);
//如何获取
NSLog (@"%@", [arrM objectAtIndex:0]);
NSLog(@"%@", arrM[0] );
//注意:不能通过@[]来创建一个可变数组, 因为@[]创建出来的是一个不可变的数组
//如果把一个不可变数组当做一个可变数组来使用,会引发一个运行时的错误
NSMutableArray *arrM = @[@"Lnj", @"Lmj"]; //此时右边创建的时一个不可变的,而你左边再用可变的接收
return 0;
}
#import
int main(int argc, const char * argv[])
{
// 1.如何创建
NSDictionary *dict = [NSDictionary dict ionaryWithobject:@"lnj" forKey:@"name"];
NSString *name = [dict objectForKey :@"name"];
NSLog(@"name = %@", name);
//注意: key和value 是一对应
NSDictionary *dict = [NSDictionary dictionaryWithobjects:@[@"lnj", @"30", @"1.75"] forKeys:@ [@"name", @"age", @"height"]]; .
NSLog(@"%@ %@ %@",[dict objectForKey:@"name"], [dict objectForKey:@"age*"], [dict objectForKey:@"height"]);
//NSDictionary *dict = @{key:value};
//快速创建字典
NSDictionary *dict = @{
@"name": @"lnj"};
//快速拿字典内容
NSLog(@"%@",dict [@"name"]);
//快速创建多个
NSDictionary *dict = @{
@"name":@"lnj", @"age" :@"30", @"height" :@"1.75"};
return 0;
}
// 2. 字典的遍历
NSDictionary *dict = @{
@"name" :@"lnj", @"age":@"30", @"height" :@"1.75"};
// 2. 1如何获取字典中key和value的个数,在字典中key称之为键,value称之为值
NSLog (@"count = %lu",[dict count]) ;
//第一种
for(int i = 0; i< dict.count; ++i)
{
//获取字典中所有的key
NSArray *keys = [dict allKeys];
//取出当前位置对应的key
NSLog (@"%@",keys[i]);
NSString *key = keys [i];
NSString *value = dict [key] ;
NSLog(@"key = %@,value = %@", key, value);
}
//第二种
//如何通过forin遍历字典,会将所有的key赋值给前面的obj
for (NSString *key in dict)
{
NSLog (@"%@",key);
NSString *value = dict [key];
NSLog(@"key = %@, value = %@", key, value);
}
//第三种
[dict enumerateKeysAnd0bj ectsUs ingBlock:^(id key,id obj,BOOL *stop) {
//参数就是Key,Val
NSLog(@"key = %@,value = %@", key, obi);
}];
}
// 3.字典文件读写
//往文件中写
NSDictionary *dict = @{
@!"name" :@"Lnj", @"age" :@"30", @"height" :@"1.75"};
// XML扩展名plist
[dict writeToFile:@""/Users/xiaomage/Desktop/info.plist" atomically:YES];
//注意:字典和数组不同,字典中保存的数据是无序的
//从文件中读
NSDictionary *newDict = [NSDictionarydictionaryWithContents0fFile:@"/Users/xiaomage/Desktop/info. plist"];
NSLog(@"%@",newDict);