一、NSArray
C的数组:相同类型的变量
OC数组:一个OC数组中只能存对象。(绝对不能存基本数据类型。)
1、使用alloc方法创建一个OCArr
//这是一个OC数组的指针
//这是一个用alloc实例化出来的数组对象
NSArray *arr =[NSArray alloc];
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"abc",@"def",@"ghi", nil];
NSArray *arr =[NSArray alloc];
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"abc",@"def",@"ghi", nil];
//用一个数组来初始化另外一个数组。
NSArray *arr2 = [[NSArray alloc] initWithArray:arr1] NSLog(@"%@",arr2);
2、用类方法创建一个OCArr(更常用)
NSArray *arr6 =[ NSArray arrayWithObjects:@"1",@"2", nil];
NSArray *arr5 = [NSArray arrayWithArray:arr4];
3、数组长度([arr5 count];)
NSInteger length = [arr5 count];
NSLog(@"%lu",length);//4,目的防止越界
4.从数组中去取某一个index的对应对象的值(objectAtIndex)
NSString *str = [arr6 objectAtIndex:0];
//从数组中取出某一个下标对应对象的方法是objectAtIndex,参数是下标,调用这个方法的是一个数组对像。
NSLog(@"%@",str);
5. 遍历数组
//字符串长度用 length,数组用count;
//第一种遍历方法
for(int i = 0;i<[arr6 count];i++)
{
NSLog(@"%@",[arr6 objectAtIndex:i]);
}
//第二种遍历方法-------for in 遍历(此方法需要保证数组里存的全是一个类型)
//我们在for循环的条件里面实例化一个对象,让这个对象在数组中
for(NSString *tempStr in arr7)
{
NSLog(@"tempStr:%@",tempStr);
}
6.字符串切割(componentsSeparatedByString)
NSString *subedStr = @"i am pig";
//用字符串来调用方法
//方法:componentsSeparatedByString
//参数是:切割条件,
NSArray *subArr = [subedStr componentsSeparatedByString:@" "];
NSLog(@"subArr:%@",subArr);
NSMutableString *finalStr = [NSMutableString stringWithCapacity:0];
//法一
for(int i =0;i<[subArr count];i++)
{
[finalStr appendString:[subArr objectAtIndex:i]];
}
NSLog(@"%@",finalStr);
//法二
for(NSString *tempStr1 in subArr)
{
NSLog(@"%@",tempStr1);
}
7. 一次切多个条件(包括年、月、日、空格、冒号。。。)
//方法是componentsSeparatedByCharactersInSet
//参数是一个集合,使用[NSCharacterSet characterSetWithCharactersInString:<#(NSString *)#>]来创建,把所有的要切的内容写到这个参数的字符串里面。
NSString *timeStr = @"2014年7月23日 11:38:30";
NSArray *timeArr = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日 :"]];
NSMutableString *nsMut = [NSMutableString stringWithCapacity:0];
NSLog(@"%@",timeArr);
for(NSString *temp in timeArr)
{
[nsMut appendString:temp];
}
NSLog(@"%@",nsMut); //2014723113830
8. NSMutableString 可变数组
8.1 实例化
8.1.1实例化 alloc方法
NSMutableArray *muArr1 = [[NSMutableArray alloc] initWithCapacity:0];//和可变字符串一样
8.1.2 类方法
NSMutableArray *muArr2 = [NSMutableArray arrayWithCapacity:0];
8.2 增
8.2.1只可往后加,一次加一个串addObject
[muArr1 addObject:@"123"];
NSLog(@"%@",muArr1);
[muArr1 addObject:@"456"];
NSLog(@"%@",muArr1);
8.2.2 可随意加。insertObject
[muArr1 insertObject:@"789" atIndex:1];
NSLog(@"%@",muArr1);
8.3 改 replaceObjectAtIndex
//replaceObjectAtIndex 要被改的下标,withObject要被改成什么。
[muArr1 replaceObjectAtIndex:1 withObject:@"changed"];
NSLog(@"%@",muArr1);
8.4 删除
8.4.1 删某一位 removeObjectAtIndex
[muArr1 removeObjectAtIndex:1];
NSLog(@"%@",muArr1);
[muArr1 removeObject:@"king"];
8.4.2 删除最后一位removeLastObject
[muArr1 removeLastObject];
NSLog(@"%@",muArr1);
8.4.3 全删 removeAllObjects
[muArr1 removeAllObjects];
NSLog(@"%@",muArr1);
8.4.4 将整形转为字符串型存入数组方式
NSMutableArray *numArr = [NSMutableArray arrayWithCapacity:0];
for(int i=0;i<17;i++)
{
[numArr addObject:[NSString stringWithFormat:@"%d",i ]];//将int转成NSString然后存入数组。
}
NSLog(@"%@",numArr);
9.排序
//排序,只可用在可变数组
NSArray *numArr1 = @[@"a",@"b",@"c"];
//上面数组不可排,因为不可变。
NSMutableArray *numArr2 = [NSMutableArray arrayWithCapacity:0];
numArr2 = [NSMutableArray arrayWithArray:numArr1];
//交换可变数组中元素的位置
[numArr2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"%@",numArr2);
//那么排序的时候就不需要中间变量了
for(int i =0;i<numArr2.count-1;i++)
{
for(int j =0;j<numArr2.count-i-1;j++)
{
if([numArr2[j] compare:numArr2[j+1]]>0)
{
[numArr2 exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}
NSLog(@"%@",numArr2);
二、NSDictionary 字典是无序的
1、创建 alloc
//字典的格式,key value
//在字典的方法中,value在前,key在后
//大括号表示字典
//打印的时候格式是key = value 这样子
//key一般是字符串,value只要是对象就行。
NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2", nil];
NSLog(@"%@",dic);
2.创建 类方法
NSDictionary *dic1 =[ NSDictionary dictionaryWithObjectsAndKeys:@"meat",@"food",@"tea",@"drink", nil];
NSLog(@"%@",dic1);
3. 根据key找到value objectForKey
//因为上面字典的value全是NSString,所以这里用它来接。(value是什么就用什么来接收)
//方法要用字典对象来调用 方法名是:
NSString *value1 = [dic1 objectForKey:@"food"];
NSLog(@"%@",value1);//meat
4. 遍历字典-------遍历的是key
//先遍历出来key,value自然就找到了
//通过字典的遍历,可以得到字典所有的key,存为一个数组。
//方法名就是allkeys,找到所有的key,存成数组
4.1得到字典所有key值。 .. allKeys
NSArray *keyArr = [dic1 allKeys];
NSLog(@"%@",keyArr);
//遍历出来key了,就可以循环这个key的数组,找到所有的value。
for(int i=0;i<[keyArr count];i++)
{
//tempValue就是每一个key对应的value
//dic1就是正在遍历的字典。
//
NSString *tempValue = [dic1 objectForKey:[keyArr objectAtIndex:i]];
//分解动作
// NSString *nowObj = [keyArr objectAtIndex:i];
// NSString *tempValue = [dic1 objectForKey:nowObj];
}
5.可变字典 NSMutableDictionary
5.1 alloc 创建
NSMutableDictionary *muDic = [[NSMutableDictionary alloc] initWithCapacity:0];
5.2 创建 类方法
NSMutableDictionary *muDic1 = [NSMutableDictionary
dictionaryWithCapacity:0];
5.3 增 setValue
[muDic1 setValue:@"china" forKey:@"country"];
[muDic1 setValue:@"yellow" forKey:@"surface"];
[muDic1 setValue:@"chinese" forKey:@"language"];
[muDic1 setValue:@"none" forKey:@"hobby"];
NSLog(@"%@",muDic1);
5.4 删(根据key删)removeObjectForKey
[muDic1 removeObjectForKey:@"hobby"];
NSLog(@"%@",muDic1);
5.5 全删 removeAllObjects
[muDic1 removeAllObjects];
NSLog(@"%@",muDic1);
附:
//数组的简单写法
NSArray *simpleArr = @[@"1",@"2",@"3"];
NSArray *simpleArr1 = @[@"1",@[@"a",@"b"],@"3"];
//数组的简单取值
NSLog(@"%@",simpleArr1[1]);
//数组的长度
NSLog(@"长度为%ld",simpleArr1.count);
NSLog(@"长度为%ld",[simpleArr1[1] count]);
//字典简单写法
NSDictionary *simpleDic = @{@"key":@"value",@"key":@"value"};
NSLog(@"%@",simpleDic);