OC-EX41OC集合类

OC-EX41OC集合类
  1  //
  2  //   main.m
  3  //   集合类
  4  //
  5  //   Created by sixleaves on 15/5/14.
  6  //   Copyright (c) 2015年 小码哥. All rights reserved.
  7  //
  8 
  9 #import <Foundation/Foundation.h>
 10 
 11 
 12  void createSet();
 13  void createArray();
 14  void createDictionary();
 15  int main( int argc,  const  char * argv[]) {
 16     
 17     createSet();
 18     createArray();
 19     createDictionary();
 20 
 21      return 0;
 22 }
 23 
 24 
 25  void createArray() {
 26      //  C语言数组与NSArray的区别
 27       /*
 28       1.NSArray可以存放任何对象,而C语言只能存放一种类型。
 29       2.NSArray不能存放基本数据类型,而C语言数组可以。
 30       3.NSArray不能存放空值(nil).
 31        */
 32     
 33      //  不可变数组,创建后不可再改变,所以array永远是空数组
 34       //  所以不可变数组,只能在创建的时候放数据进去。
 35      NSArray *array = [NSArray array];
 36     
 37      //  0.nil用来标识NSArray中结束的标识
 38       //  0.古老方式-创建数组
 39      NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"swp", nil];
 40     
 41      //  0.常用方式-创建数组(编译器特性)
 42      NSArray *array3 = @[@"swp", @"gh"];
 43     
 44      //  1.数组元素的个数
 45       long len = array2.count;  //  点语法
 46      NSLog(@"%ld", len);
 47     
 48      //  2.访问数组
 49       //  古老的方式
 50      NSLog(@"%@", [array2 objectAtIndex: 1]);  //  从0开始计数
 51      
 52       //  常用方式(编译器特性)
 53      NSLog(@"%@", array2[1]);
 54     
 55      //  3.数组遍历方式
 56       //  3.1-古老方式
 57      NSArray * array5 = @[@"fuck", @"what", @"you"];
 58      for (  int i = 0; i < array5.count; i++) {
 59         NSLog(@"%@", array5[i]);  //  NSArray中的元素都是对象
 60           //  而对象打印出都是用%@
 61      }
 62     
 63      //  3.1-常用方式
 64       for (id obj  in array5) {
 65         NSLog(@"%@", obj);
 66     }
 67     
 68      //  3.1-常用方式-block
 69      [array5 enumerateObjectsUsingBlock:
 70      ^(id obj, NSUInteger idx, BOOL *stop) {
 71          NSLog(@"%ld-%@",idx, obj);
 72          *stop = YES;
 73      }
 74      ];  //  每拿到一个元素都会回调block,obj就是元素,idx为元素的对应索引
 75       //  stop是用来表示是否继续下一次循环。如果设置成YES本次循环结束
 76       //  就不会继续下一次。
 77       /*
 78       NSArray总结:
 79       1.创建方式(常用-古老)
 80       
 81       2.访问方式(常用-古老)
 82       
 83       3.遍历方式(三种)
 84       3.1 直接for循环
 85       3.2 for-in循环
 86       3.3 使用block
 87        */
 88     
 89     
 90      //  1-1.创建. 创建不可变数组只能通过方法创建。(@[]创建的不可变数组)
 91      NSMutableArray *array7 = [NSMutableArray array];  //  arrayWithObjects
 92      
 93       //  2-1 添加
 94      [array7 addObject:@"swp"];
 95     
 96      //  3-1 删除
 97      [array7 removeObject:@"swp"];
 98      //  [array removeObjectAtIndex:0];
 99       //  [array removeAllObject];
100      
101       //  遍历
102       for (id obj  in array7) {
103         
104         NSLog(@"%@", obj);
105     }
106     
107     
108 }
109 
110  void createSet() {
111      /*
112       NSSet与NSArray最大的区别就是NSSet是无序的。
113        */
114     NSSet *s = [NSSet setWithObjects:@"swp", @"fuck", nil];
115     
116     NSLog(@"len = %ld", s.count);
117     
118      /*
119       因为set是无序的,所以从set中取东西逻辑上就不可能有序,也就是随机的。
120        */
121     NSString *str = [s anyObject];
122     
123     NSLog(@"str = %@", s);
124     
125      //  创建
126      NSMutableSet *s2 = [NSMutableSet  set];
127     
128      //  添加
129      [s2 addObject:@"fuck"];
130     
131      //  遍历
132       for (id obj  in s2) {
133         NSLog(@"obj in set is = %@", obj);
134     }
135     
136      //  NSSet不能使用block进行遍历
137      
138       //  删除
139      [s2 removeObject:@"fuck"];
140     
141     
142     
143      /*
144       NSSet与NSArray的对比
145       1》共同点
146       * 都是集合、能存放多个OC对象。
147       * 都不能存放基本数据类型、结构体、枚举、共用体
148       * 本身都是不可变的、都有一个可变的子类。
149       
150       2》不同点
151       1.NSSet是无序的,NSArray是有序的。
152       
153        */
154 }
155 
156  void createDictionary() {
157      /*
158       NSDictionary: 表示的是一种映射关系,是不可变对象。
159       NSMutableDictionary: 可变对象。
160       字典也是没有顺序的。
161        */
162      //  1-1.创建的是空字典、
163      NSDictionary * dict1 =[NSDictionary dictionary];
164     
165      //  1-2.根据值数组和键数组创建字典。
166      NSArray *keys = @[@"name", @"address"];
167     NSArray *values = @[@"jack", @"北京"];
168     
169     NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
170      // NSLog(@"dict2 = %@", dict2);
171      
172       //  1-3.直接根据键值对创建
173      NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
174                            @"jack", @"name",
175                            @"北京", @"address",
176                            @"10086", @"qq", nil];
177      //  1-3.常用方式-编译器特性.
178      NSDictionary *dict4 = @{@"name": @"jack", @"address" : @"北京"};
179     
180      //  2-1.旧方式-访问字典
181      id obj = [dict4 objectForKey:@"name"];
182     
183      //  2-1.新方式-访问字典
184      id obj1 = dict4[@"name"];
185      //  NSLog(@"%@, %@", obj, obj1);
186      
187      
188       //  3-1.字典键值对的大小
189      NSUInteger i = dict4.count;
190     NSLog(@"i = %ld", i);
191     
192     
193     
194      //  NSMutableDictionary
195      
196     NSMutableDictionary * dict5 = [NSMutableDictionary dictionary];
197     
198      //  1.添加
199      [dict5 setObject:@"jack" forKey:@"name"];
200     
201     [dict5 setObject:@"rose" forKey:@"name"];  //  会覆盖掉原来的值
202      
203       //  2.删除(键值对)
204      
205       //  [dict5 removeObjectForKey: @"name"];
206      
207       //  3.打印字典, 直接NSLog就行。
208      
209       //  4.注意点
210       /*
211       @{}创建的不可变字典,不能将其赋值给可变字典指针!否则可能在程序
212       运行过程中会引起程序崩溃!因为调用了可变字典的方法。
213        */
214     
215 }
216 

总结:
以后一看到Mutable就知道这两个肯定是父子关系。
NSArray\NSMutableArray:
*有序
*快速创建方式:(不可变) @[]
*快速访问方式: 数组名[i]
NSSet\NSMutableSet:
*无序
*无快速创建方、和快速访问方式
NSDictionary\NSMutableDictionary:
*无序
*快速创建方式(不可变): @{}
*快速访问方式: 字典名[键值]

你可能感兴趣的:(OC-EX41OC集合类)