代码改变世界

OC中的数组 字典 集合 OC对象与基本数据类型转换

2015-08-25 10:34  TemptationM  阅读(658)  评论(0)    收藏  举报
一:数组
 
数组:
 
1> 不可变数组 NSArry  数组是一个大容易,  可以存放不同的对象, 而且, 数组元素必须是对象
 
2> 可变数组  NSMutableArray  是NSArry的子类
 
 
1⃣️ 不可变数组
*****************创建数组***************
第一种写法: 
初始化写法: (利用系统自带的初始化方法)
NSArray *arr =[ [NSArray alloc] initWithObject : @“LanOu”, @“HeNan”, nil ];// nil是数组元素结束的标志
 
 
第二种写法:
便利构造器:
NSArray *arr1 = [NSArray arrayWithObject: @“LanOu”, @“HeNan”, nil];
 
第三种方法:
创建一个空数组对象
NSArry *arr2 = [NSArray array];
 
第四种:
把一个数组赋给另一个数组
NSArray *arr3 = [NSArray  arrayWithArray : arr1];
 
第五种:
简易写法  (笑笑语法)
NSArray *array = @[@“22”, @“4”, @“ss”, @“0”];
 
****************获取数组中的元素*************
1> 获取元素个数
         NSUInteger   a  =  [array count];//此方法返回的是一个unsigned long
 
2> 获取数组中某个下标的元素
     NSString *str = [array  objectAtINdex : 0];//此方法返回的对象类型取决于这个数组元素的类型
 
3> 获取数组的首个元素 
     NSString *str2 = [array firstObject];//返回的可能是任何类型   取决于这个元素是何类型
 
4> 获取数组中的最后一个元素
     NSString *last = [array lastObject];
 
****************是否包含某个元素*************
BOOL isExist = [array  containsObject: @“1”];//返回的是一个BOOL类型
 
 
****************获取某个元素的下标*************
NSUInteger  index = [array indexOfObject : @“22”];//返回值类型是unsigned long
 
 
****************在给定范围内查找字符串所在的下标*************
NSUInteger  i = [array indexOfObject:@“22” inRang: NSMakeRang(0, 4)];//如果有重复的会返回第一个查找到的对应的元素下标 
 
 
****************判断两个数组是否相等*************
BOOL isEqual = [arr1  isEqualToArray: arr2];   //判断两个对象是否相等(字符串, 数组)   除了数字
 
 
****************遍历数组*************
1>  for循环
      for(int i= 0; i< [array count]; i++)
 
2> 快速遍历数组
for  in  在集合里面遍历元素, 每遇到一个对象元素就会把元素取出来, 执行for in 里面的语句, 知道集合里面没有对象为止  (这个遍历的元素可以是任何类型, 可以是字符串, 也可以是数组, 或者其它任何对象)
      for (NSString *object in arr1) {
        NSLog(@"%@", object);
    }
 
 
 
2⃣️可变数组
****************创建一个可变数组************
1> 初始化方法
NSMutableArray *muArr1 = [[NSMutableArray alloc] initWithCapacity: 2];
//最后的数组长度可以随便写(大于等于1), 在存放元素时, 如果不够, 数组会自动扩充
 
2> 便利构造器
NSMutableArray *muArr = [NSMutableArray arrayWithCapacity:1];
 
3> 创建一个空数组
NSMutableArray *muArr = [NSMutableArray array];
 
4> 在初始化数组时直接继承其他数组的元素
NSMutableArray *tem = [NSMutableArray arrayWithArray:arr];
 
****************添加数组元素************
1> 第一种  //把一个不可变数组中的元素添加到muArr中
[muArr  addObjectsFromArray: array];
 
 
2> 第二种  //为muArr添加一个元素    在原有数组的最后添加一个元素
[muArr  addObject:@“22”];
 
3> 第三种  //插入一个元素    在原有数组的指定下标处插入一个元素
[maArr insertObject:@“sb” atindex:1];
 
****************删除元素************
1> 删除最后一个元素
[muArr  removeLastObject];
 
2> 删除指定下标的元素
[muArr removeObjectAtIndex:1];
 
 
3>删除指定范围的数组元素
 [muArr removeObject:@"2" inRange:NSMakeRange(0, 3)];
 
4> 全部删除
[muArr removeAllObjects];
 
****************替换元素************
1>用给定的对象 替换指定下标的元素
[muArr replaceObjectAtIndex:0 withObject:@"hehe"];
 
2> 将两个下标的元素替换
 [muArr exchangeObjectAtIndex:0 withObjectAtIndex:2];
 
 
 
****************数组排序************
1>
//对可变数组排序      操作的是可变数组的本身
 [muArr sortUsingSelector:@selector(compare:)];
 
2> 复制一个排好序的可变数组给不可变数组
NSArray *sorteArr = [muArr sortedArrayUsingSelector:@selector(compare:)];
 
*********************************************分割线***************************************************
 
二 基本数据类型转换为OC中的对象类型    NSNumber
 
1> 利用OC对象方法装换   (将C语言中的数据类型转换为OC对象类型)
int a = 10;
NSNumber *num = [NSNumber numberWithInt:a];
 
2> 利用'语法糖’或'笑笑语法'
 int b = 5;
NSNumber *numA = @3;//语法糖 ,笑笑语法
NSNumber *bb = @(b);
NSNumber *FF = @1.5;
 
 
3>OC数据类型转换为OC对象类型
    NSInteger n = 12;
    NSNumber *num1 = [NSNumber numberWithInteger:n];
    NSNumber *fNum = [NSNumber numberWithFloat:12.5];
 
4> 将BOOL类型转换为OC对象类型
BOOL isTrue = YES;
    NSNumber *value = [NSNumber numberWithBool:isTrue];
 
 
三  对象类型转换为基本数据类型
 
1> 对象类型转换位基本数据类型
NSNumber *numA = @3
NSNumber *FF = @1.5;
 
NSInteger nu = [numA integerValue];//对象转化那为基本整型
float f = [FF floatValue];//对象转换为浮点型
int a = [numA intValue]; 
 
 
2>  数组里面只能存放对象类型元素
NSArray *array4 = [NSArray arrayWithObjects:@2, @4, @5.2, nil];
 
 
**********************************分割线****************************************
 
三. 字典  存放的是一对key-value(键值对)
1> 用来存储以一一对应关系的数据类型
2> 一个value只对应多个key; 一个key能对应一个value
3> 无序的
 
不可变字典:   对象的创建
              获取所有的key        allKeys
              获取所有value        allValues
              获取key对应的value   objectForKey
              遍历
不可变字典:对象创建
                添加元素(键值对)     setObject:ForKey:
                修改key对应的value
 
************************************不可变字典的创建*************************
1> 便利构造器
NSDictionary *dic = [NSDictionary dictionaryWithObject:@“XiaoQiang” forKey@“name”];
 
2> 初始化方法
NSDictionary *dic2 = [NSDictionary alloc] initWithObjectAndKeys:@“ZhangSan”, @“name”, @“Man”, @“gender”, @21, @“aeg”, nil];
 
****************不可变字典key的个数************
NSUInteger count = [dic2 count];
 
 
****************获取字典中的key对应value的值************
1> 方法一
NSString *name = [dic2 valueForKey:@"name"];
 
2> 方法二
NSString *obj = [dic2 objectForKey:@"name"];
 
3> 方法三
NSString *val = dic2[@"gender"];
 
****************获取字典中所有的key值************
NSArray *keys = [dic2 allKeys];
 
 
****************获取字典中所有的value值************
 
NSArray *values = [dic2 allValues];
 
 
********************************创建可变字典**************************************
可变字典  NSMutableDictionary
1> 初始化方法 
NSMutableDictionary *mudic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"firday", @"week", @"10",
        @"day", nil];
 
2> 便利构造器
NSMutableDictionary *muDic = [NSMutableDictionary dictionaryWithCapacity:10];
//字典长度可以随意设置(大于等于1)   若在存储时不够, 字典会自动扩充
 
3> 根据不可变字典复制而来
NSMutableDictionary *dd = [NSMutableDictionary dictionaryWithDictionary:dic];
****************添加键值对************
[muDic setObject:@“value”, forKey:@“key”];
 
 
****************修改已存在的key对应的value值************
[muDic setObject:@“123”, forKey:@“key”]
 
 
 
****************对字典的遍历************
for(id object in muDic)
{
     NSLog(@“%@“, object);
}
 
/**********************集合*************************/
    //集合(NSSet  NSMutableSet)
    /*
     1> 无序性
     2> 互异性(唯一性)
     */
    //创建集合对象
    NSSet *set = [[NSSet alloc] initWithObjects:@"0", @"2", @"4", @"2", @"1", nil];
    NSLog(@"%@", set);
    //获取集合的元素个数   count
    NSLog(@"%lu", [set count]);
   
   
    //获取集合中的元素   anyObject
    NSString *str1 = [set anyObject];
    NSLog(@"%@",str1);
    NSString *str2 = [set anyObject];
    NSLog(@"%@", str2);
    NSString *str3 = [set anyObject];
    NSLog(@"%@", str3);
   
   
    NSArray *numbers = [set allObjects];
    NSLog(@"%@", numbers);
    //遍历集合元素
    for (id obj in set) {
        NSLog(@"%@", obj);
    }
   
   
    //可变集合 NSMutableSet
    NSMutableSet *newSet = [NSMutableSet setWithCapacity:1];
   
    //添加元素
    [newSet addObject:@"new"];
    [newSet addObject:@"old"];
   
    //移除元素
    [newSet removeObject:@"new"];
   
    //移除所有元素
    [newSet  removeAllObjects];
   
   
   
   
    //计数集合  NSCountedSet : NSMutableSet : NSSet
    NSCountedSet *couSet = [[NSCountedSet alloc] initWithObjects:@"11", @"22", @"33", @"22", @"11", nil];
   
    //计算元素出现的次数
    NSUInteger num1 = [couSet countForObject:@"11"];
    NSUInteger num2 = [couSet countForObject:@"22"];
    NSLog(@"%lu, %lu", num1, num2);
   
   
   
   
    /*总结
     集合:
     集合中的元素个数: count
     对象创建: 初始化方法   便利构造器
     forin  (快速枚举(遍历))
     数组: 遍历的是数组的元素
     字典: 遍历的是字典的key
     集合: 遍历的是集合的元素
    
    
     NSArry         :   有序的
     NSDictionary   :   无序的  一个key只能对应一个value; 一个value可以对应多个key
     NSSet          :   无序的  元素唯一性
    
    
     #warning: 在我们自定义类时, 不能用 NSString    NSMutableString;  NSArray NSMutableArray  NSDictionary    NSMutableDictionary;  NSSet    NSMutableSet    NSCountedSet做父类, 因为这些类不是单一的一个类, 而是一个类族(多个类的组合)