数组、字典、集合
NSArray * nn = @[@"元素1",@"元素2",@"元素3"];
NSUInteger i = [nn indexOfObject:@"元素1" inRange:NSMakeRange(0, 3)];
NSLog(@"在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素下标%lu --",i);
//NSMakeRange 里面的范围不能超了
int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); //OC 里面的数组放的是对象必须是对象(可以存放不同类型的对象) 与 C语言里面的数组不同的是 OC里面的数组可以放不同类型的数据 //数组 不可变数组 NSArry 数组是一个大容器 可以存放不同种 不同类的对象 不仅可以存放字符串 数组 //创建数组 普通方法 NSString * arr = [[NSArray alloc]initWithObjects:@"yingjie",@"liuxian", nil];//最后以 nil 结尾,nil 是数组元素结束的标志 初始化方法是:initWithObjects //便利构造器写法 NSArray * arr1 = [NSArray arrayWithObjects:@"xiaobing", nil]; //创建一个空的数组 NSArray * arr2 = [NSArray array]; //把数组 arr1 存放到 arr3 里面 NSArray * arr3 = [NSArray arrayWithArray:arr1]; NSLog(@"%@",arr3);//在控制台数组的输出都带一个小括号 //创建一个简单的写法 NSArray * arry = @[@"元素1",@"元素2",@"元素3"]; //获取数组元素个数 count NSUInteger c = [arry count]; NSLog(@"%lu",c); //获取数组中某个下标的数组元素 NSString * str = [arry objectAtIndex:1]; NSLog(@"%@",str); //获取数组的首个元素 firstObject 也可以是 objectAtIndex:0 NSString * fist = [arry firstObject]; //获取数组的最后一个元素 lastObject NSString * last = [arry lastObject]; NSLog(@"%@ %@",fist,last); //是否包含某个对象元素 BOOL isTrue = [arry containsObject:@"1"]; NSLog(@"%ld e",isTrue); //获取数组元素的下标 NSUInteger index = [arry indexOfObject:@"元素1"]; NSLog(@"%ld f",index); /*//在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素 NSArray * nn = @[@"元素1",@"元素2",@"元素3"];//该例子没有跟上********且有错误 NSUInteger i = [nn indexOfObject:@"2" inRange:NSMakeRange(0, 4)]; NSLog(@"%lu --",i);*/ //数组的比较 比较给定的数组与原来的数组是否相等 isEqualToArray 如果对应的元素不等,改了顺序才等,那也是不相等 BOOL isEqual = [arr1 isEqualTo:arr2]; NSLog(@"%d d",isEqual); //遍历数组元素 for (int i = 0; i < [arry count]; i++) { NSLog(@"%@ 000",[arry objectAtIndex:i]); } //快速遍历、枚举出(数组集合)的方法 在集合 或者数组里查找元素 for (NSString *object in arry) { // NSLog(@"%@ 111",object); NSLog(@"%@ 111",object); } //for in 在集合里面遍历元素,每遇到一个对象元素都会把元素取出,执行 forin 里面的语句,直到集合里没有对象为止 for (id object in arry) { // NSLog(@"%@ 111",object); NSLog(@"%@ 111",object); } //可变的数组 NSMutableArray 是 NSArray 的子类 //比 NSArray 多的功能是 ??? // 创建一个可见数组 NSMutableArray NSMutableArray * muArry = [NSMutableArray arrayWithCapacity:1];//便利构造器 NSMutableArray * muArry1 = [NSMutableArray arrayWithCapacity:2];//普通的方法 //添加数组元素 [muArry addObject:@"22"];//把不可变数组元素添加到可变的数组中 NSLog(@"%@",muArry); NSMutableArray * muArry2 = [NSMutableArray arrayWithArray:arry];//便利构造器吧一个数组元素添加到可变数组中 //插入一个数组元素 [muArry insertObject:@"hello" atIndex:1]; NSLog(@"%@",muArry); // [muArry insertObjects:arr atIndexes:set]; //这里是一个集合 //删除一个数组元素 [muArry removeLastObject]; //删除数组中最后一个元素 NSLog(@"%@",muArry); [muArry removeObjectAtIndex:0]; NSLog(@"删除数组中指定下标的元素%@",muArry); //删除指定范围的元素 [muArry insertObject:@"hello0" atIndex:0]; [muArry insertObject:@"hello1" atIndex:1]; [muArry insertObject:@"hello2" atIndex:2]; [muArry insertObject:@"hello3" atIndex:3]; [muArry insertObject:@"hello4" atIndex:4]; [muArry removeObject:@"hello4" inRange:NSMakeRange(0, 5)];//这里创造的范围不能超出了 NSLog(@"%@",muArry); //全部删除数组的元素 [muArry removeAllObjects]; NSLog(@"全部删除数组的元素后:%@",muArry); [muArry addObjectsFromArray:@[@"z00",@"a11",@"w22",@"f33",@"y44",@"t55",@"r66",@"l77"]];//这里是一个简便的nsarry写法 里面要是写上 汉字的话 打印的是 一行其他的编码 [muArry replaceObjectAtIndex:0 withObject:@"11"];//替换第一个元素为11 NSLog(@"%@",muArry); //交换指定下标的元素对象 [muArry exchangeObjectAtIndex:0 withObjectAtIndex:2];//交换第一个 第二 个元素的对象 NSLog(@"交换指定下标的元素对象%@",muArry); //对于常用的方法最好是能记住 //对数组排序 Sorts the array’s elements in ascending order, as determined by the comparison method specified by a given selector. // sortUsingSelector: 对数组的排序 [muArry addObject:@"12"]; [muArry addObject:@"01"];//这里的数字是字符串对象 NSArray * ny = [muArry sortedArrayUsingSelector:@selector(compare:)];//这里是对立面的元素进行排序,然后把排好序的数组返回,这里没有操作本身 NSLog(@"%@",ny); // [muArry sortUsingSelector:@selector(compare:)];//这里是直接排序,这里是操作了本身 NSLog(@"%@",muArry); } return 0; }
//为空的可变字典添加键值对 [muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对 [muDic setObject:@"123" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key // [muDic setValue:@"value" forKey:@"key"]; NSLog(@"%@",muDic);
//字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value
用来存储——————一一对应的关系的数据
一个 value 可以对应多个 key
一个 key 只能对应一个 value
不可变字典:对象创建
字典元素个数(键值对)个数 count
获取所有key allkeys
获取所有的value allValues
获取key 对应的 value objectForKey
遍历 forin
可变字典:对象创建
添加元素(键值对) setObject:ForKey
修改key 对应的value
*/
//创建字典对象
//便利构造器的写法创建了一个不可变的字典
//今天所学集合的总结
/*
NSarry 有序的
NSDictionary 无序的 一个 Key 只对应一个 value ;一个 value 可以对应多个 key
NSSet 无序的 元素的唯一性
他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法
对象的创建都有两种:初始化 initWithArray ,便利构造器
对集合的一个快速枚举遍历 forin 对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值 对与集合来说,也是集合中元素的个数
在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、 NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类)
*/
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* //字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value 用来存储——————一一对应的关系的数据 一个 value 可以对应多个 key 一个 key 只能对应一个 value 不可变字典:对象创建 字典元素个数(键值对)个数 count 获取所有key allkeys 获取所有的value allValues 获取key 对应的 value objectForKey 遍历 forin 可变字典:对象创建 添加元素(键值对) setObject:ForKey 修改key 对应的value */ //创建字典对象 //便利构造器的写法创建了一个不可变的字典 // NSDictionary * dic = [NSDictionary dictionaryWithObjects:@"刘洋" forKeys:"name"];//这里是一个不可变字典 //初始化写法 NSDictionary * dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"liu yang",@"name", @"xxx",@"gender",@"45",@"age",@"98.5",@"score",@"liu yang",@"nn", nil];//字典里不能有多个相同的 key NSLog(@"%@",dic1); //字典是无序的 打印的结果是 Key = value; //字典 key 的个数 NSUInteger count = [dic1 count]; NSLog(@"%lu",count); //获取字典中 key 对应的 value 的值 NSString * ns = [dic1 valueForKey:@"name"]; NSString * val = dic1 [@"anme"];//简单写法 等于上边 NSLog(@"%@",ns); [dic1 objectForKey:@"name"];//不确定是个字符串类型 //objectForKey 与 valueForKey 区别 /* dic1 objectForKey:<#(id)#> dic1 valueForKey:<#(NSString *)#> */ NSString * name = [dic1 valueForKey:@"name"]; NSString * name2 = [dic1 objectForKey:@"name"]; //allKeys 获取字典里所有的 key 值,但并不能保证 返回的顺序是有序的 NSArray * keys = [dic1 allKeys]; NSLog(@"%@",keys); //获取字典中所有 value 的值 NSArray * values = [dic1 allValues]; NSLog(@"%@",values); //添加一个键值对 下面方法在文档里找不到 ?KVC // [dic1 setValue:@"paly" forKey:@"hobby"]; //必须是存在的 // 有问题[dic1 setValue:@"paly" forKey:@"name"]; NSLog(@"%@",keys); //可变字典 NSMutableDictionary NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"sunday",@"week",@"10",@"day", nil ]; // NSMutableDictionary * muDic2 = [NSMutableDictionary dictionaryWithCapacity:10];//初始化的字典没有一个间组织对 //为空的可变字典添加键值对 [muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对 [muDic setObject:@"123" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key // [muDic setValue:@"value" forKey:@"key"]; NSLog(@"%@",muDic); //对字典的遍历,相当于便利出所有的Key值 for (id object in muDic) { NSLog(@"%@",object); } //崩溃方法 setObject:@"123" forKey:@"key" 是可变字典的修饰方法。所以对于不可变字典不能用 //可变字典与不变字典的转化,把不可变字典用方法copy到可变的字典里面 NSMutableDictionary * dd = [NSMutableDictionary dictionaryWithDictionary:dic1]; //集合 (NSSet)子类 :NSMutableSet //1.无序的 2.互异性(每个元素都有唯一性) 3.元素的个数只是互异性之后的元素个数 //创建一个集合对象 //NSSet 只有三个方法: count anyObject allObjects 三个方法 NSSet * set = [[NSSet alloc]initWithObjects:@"22",@"81",@"12",@"2",@"31",@"4",@"2",@"6", nil]; NSLog(@"%@ 有%lu个元素",set,[set count]); //获取集合中的元素 NSString * str1 = [set anyObject];//获取随机的元素 id str2 = [set anyObject]; NSLog(@"%@",str1); NSLog(@"%@",str2); //获取所有的元素 NSArray * asa = [set allObjects]; NSLog(@"%@",asa); //遍历集合 for (id ob in set) { NSLog(@"%@",ob); } //子类 可变集合 NSMutableSet : NSSet //创建 NSMutableSet * newSet = [NSMutableSet setWithCapacity:1]; //添加元素 [newSet addObject:@"new"]; [newSet addObject:@"old"]; //移除元素(一个) [newSet removeObject:@"new"]; //移除全部元素 [newSet removeAllObjects]; //计数集合 NSCountSet : NSMutableSet :NSObject NSCountedSet *countSet = [[NSCountedSet alloc]initWithObjects:@"11",@"22",@"11", @"11",@"33",@"11", nil]; //计算元素出现的次数 NSUInteger num1 = [countSet countForObject:@"11"]; NSUInteger num2 = [countSet countForObject:@"33"]; NSLog(@"11出现%lu次 33出现%lu次",num1,num2); //今天所学集合的总结 /* NSarry 有序的 NSDictionary 无序的 一个 Key 只对应一个 value ;一个 value 可以对应多个 key NSSet 无序的 元素的唯一性 他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法 对象的创建都有两种:初始化 initWithArray ,便利构造器 对集合的一个快速枚举遍历 forin 对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值 对与集合来说,也是集合中元素的个数 在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、 NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类) */ }return 0; }
1.制作一个联系人信息博 仿照手机通
NSRange 是一个结构体,有两个成员变量 location length
NSString * string1 = @"我是字符串";
NSRange range = [string1 rangeOfString:@"我是"];
NSLog(@"%lu %lu",range.location ,range.length);
rangeOfString:是看一个字符串里面是否有特定的字符串,如果有的话,就返回给NSrange 类型的结构体变量
substringFromIndex 是从下标4的位置开始到结尾,包含4(本例)
substringToIndex 是从开始位置到下标位置(不包含下标位置)
NSString * string1 = @"what a beautiful day";
NSString * string2 = [string1 substringFromIndex:4];
NSString * string3 = [string1 substringToIndex:4];
NSLog(@"%@",string2);
NSLog(@"%@",string3);
字符串也可以这样的初始化(初始化的好几种方法)
NSString * ss = [NSString string ];
ss = @"456";
NSLog(@"%@",ss);
substringWithRange 的使用截取一定范围的字符串
NSString * string1 = @"what a beautiful day";
NSString * string2 = [string1 substringFromIndex:4];
NSString * string3 = [string1 substringToIndex:4];
NSLog(@"%@",string2);
NSLog(@"%@",string3);
NSRange starToend = NSMakeRange(1, 4);
NSString * newString = [string1 substringWithRange:starToend]; //
NSLog(@"%@",newString);
stringByAppendingString:字符串拼接的用法
NSString * string = @"what a beautiful day";
NSString * string1 = [string stringByAppendingString:@"拼接字符串"];
NSLog(@"%@",string1);
stringByAppendingFormat:的用法 拼接给定格式的字符串
NSString * string2 = [string stringByAppendingFormat:@"他今年%d岁",12];
NSLog(@"%@",string2);
stringByReplacingOccurrencesOfString:替换 (本例 吧所有的 a 都替换为 b )
NSString * string3 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"b"];
NSLog(@"%@",string3);
//注意:原来的字符串本身并没有发生改变,仅仅吧输出的形式改变了,以上的都是这样的
stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:使用
NSString * string4 = [string stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"我换了给定位置的字符串"];
NSLog(@"%@",string4);
比较字符串
NSString * string = @"hellow";
NSString * string1 = @"how";
NSComparisonResult result = [string compare:string1];//结果有三个值 (-1 前者小于后 )(0 前等于后)(1 前大于后)
字符串转换大小写函数
NSString * newTem = [tmpStr lowercaseString];//全部小写
NSString * newTem2 = [tmpStr uppercaseString];//全部大写
NSString * newTem3 = [tmpStr capitalizedString]; //首字母大写(所有的子字符串首字母大写)
//字符串中的数字转化为基本的数字
NSString *numStr = @"234";
NSInteger newNum = [numStr integerValue];//得到长整型数字
NSLog(@"%ld",newNum);
float newNum0 = [numStr floatValue];//转换为浮点型数字
NSLog(@"%.2f",newNum0);
int newNum1 = [numStr intValue];//转化为int整数
NSLog(@"%d",newNum1);
char nam[20] = {0}, address[100] = {0}; printf("请输入名字拼音"); scanf("%s",nam); printf("请输入住址"); scanf("%s",address); NSString * na = [[NSString alloc]initWithUTF8String:nam]; self->_name = na;//注意要放的顺序,转码一个放一个 NSString * ad = [[NSString alloc]initWithUTF8String:address]; self->_address = ad; // NSLog(@"%@",na); return self;//把存有名字 地址的数组传出