f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
  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:
*无序
*快速创建方式(不可变): @{}
*快速访问方式: 字典名[键值]
posted on 2015-05-14 19:39 swp 阅读(438) 评论(0)  编辑 收藏 引用 所属分类: objective-c

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理