NSArray 用于对象有序集合(相当于是数组)

它有两个限制:

1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。

2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】

NSSet 用于对象无序集合

NSDictionary 用于键值映射 以上三种集合类是不可变的(一旦初始化后,不能再动态的增加或删除元素),如果需要用到可变集合,则需要用到下面几个类:

NSMutableArray

NSMutableSet

NSMutableDictionary

实例DEMO:

1:NSArray 初始化和遍历迭代

()NSArray的初始化

           NSArray的便利初始化函数: -(id) initWithObjects : (id) firstObject, ....;

           NSArray的便利构造器: +(id) arrayWithObjects: (id) firstObject, ...;

           demo:

          //NSArray的便利初始化

          NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil];

          //NSArray的便利构造器

          NSArray *array2 = [NSArray arrayWithObjects:@"", @"", @"", nil];

    ()获取数组元素的个数和数组的元素

           //获取数组元素的个数和元素

           int count = (int)[array1 count];

          //获取相应索引的元素

          id element = [array1 objectAtIndex:];

          NSLog(@"array1_count = %d, array[0] = %@", count, element);

     ()迭代:

     //封装遍历数组的函数

      void array_display(id array)

      {

       for (int i =  ; i < [array count]; i++) {

          id temp = [array objectAtIndex:i];

          NSLog(@"%@", temp);

      }

    }

2:NSMutableArray初始化和遍历迭代

.可变数组:NSMutableArray

NSArray的容量是固定的,而NSMutableArray的容量是可变的,我们可以在NSMutableArray实例化的时候先初始化一个容量,不过这个容量不是固定的,不够的时候会自动增加。NSMutableArray是NSArray的子类,是对NSArray的一个扩充。

() NSMutableArray的初始化

     NSMutableArray的便利初始化函数:-(id) initWithCapacity :  (NSUInteger)    numItems;

     NSMutableArray的便利构造器:+(id) arrayWithCapacity: (NSUInteger) numItems;

  demo:

      //NSMutableArray的便利初始化
NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:];
//NSMutableArray的便利构造器
NSMutableArray *array4 = [NSMutableArray arrayWithCapacity:]; ()元素的添加和删除 增加元素: -(void) addObject: (id) anObject; --往数组的尾部添加元素 删除全部内容: -(void) removeAllObjects; 删除最后一个元素: -(void) removeLastObject; 通过索引删除元素: -(void) removeObjectAtIndex: (NSUInteger) index; 删除任意一个元素: -(void) removeObject : (id)object; demo: //初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"", @"", @"", nil];
//添加元素
[array addObject:@""]; //移除元素
[array removeObject:@""]; //移除最后一个元素
[array removeLastObject]; //按照索引删除元素
[array removeObjectAtIndex:]; array_display(array); 删除任意一个元素: -(void) removeObject : (id)object; //初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"", @"", @"", nil];
//添加元素
[array addObject:@""]; //移除元素
[array removeObject:@""]; //移除最后一个元素
[array removeLastObject]; //按照索引删除元素
[array removeObjectAtIndex:]; array_display(array);

3:数组遍历

()要通过NSEnumerator来遍历数组首先得通过-(NSEnumerator *) objectEnumerator来得到枚举器;通过枚举其中的nextObject来获取对象

emo:如下

  //迭代遍历数组
//获取枚举器
NSEnumerator *enumerator = [array objectEnumerator];
//临时变量
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@", obj);
} ()快速遍历法,相当于PHP中的foreach的用法 for(id obj in array)
{
NSLog(@"%@", obj);
}

4:字典

//不可变字典的初始化
NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionay objectForKey:@"key1"];
NSLog(@"key1 => %@", value); //封装遍历字典的函数(字典的遍历方法是通过字典里的-(NSArray *)allKeys获取所有的key存入数组中然后通过遍历数组获取key对应的value,)
void dictionary_display(id dictionay)
{
NSArray *keys = [dictionay allKeys];
for (id obj in keys) {
NSLog(@"%@ => %@", obj, [dictionay objectForKey:obj]);
}
} //可变字典NSMutableDictionary 在使用可变字典NSMutableDictionary时可以先给可变字典初始化一个空间,如果不够的话会自动增加 给可变字典分配初始化空间: +(id) dictionaryWithCapacity : (NSUInteger) num; 给可变字典添加对象:-(void) setObject(id) obj forKey(id) aKey; 根据关键字删除对象:-(void) removeObjectForKey : (id) aKey; 删除字典中的所有数据: -(void) removeAllObjects; 代码如下: NSMutableDictionary *mulDictionary = [NSMutableDictionary dictionaryWithCapacity:];
//添加值
[mulDictionary setObject:@"value1" forKey:@"key1"];
[mulDictionary setObject:@"value2" forKey:@"key2"];
[mulDictionary setObject:@"value3" forKey:@"key3"];
[mulDictionary setObject:@"value4" forKey:@"key4"];
//通过键删除值
[mulDictionary removeObjectForKey:@"key4"];
dictionary_display(mulDictionary);

5:set

.不可变集合NSSet

    ​ ()NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器,

    ​    ​ ​便利初始化方法:-(id) initWithObjects: (id) firstObject, ...;

    ​    ​ 便利构造器:+(id) setWithObjects: (id) firstObject, ...;

    ​  ()NSSet中也有-(NSUInteger) count 来获取元素的对象

    ​  ​() 获取集合中的元素

    ​    ​ 获取全部的集合元素,以数组的形式返回:-(NSArray *) allObjects;

    ​    ​ 随进获取集合中的元素:-(id) anyObject;

    ​  ()判断两个Set是否相同 : - (BOOL) isEqualToSet: (NSSet *) otherSet;

    ​  ​()判断一个元素是否在本集合中 -(BOOL) member: (id) obj;

//set集合的操作

  //便利初始化函数
NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc", @"dd", nil];
//便利构造器
NSSet *set2 = [NSSet setWithObjects:@"AA", @"BB", @"CC", nil]; //获取集合中元素的个数
int count = (int) [set1 count];
NSLog(@"set1里面的元素的个数为:%d", count); //遍历集合:把set集合转换为数组然后进行遍历
NSArray *setToArray = [set2 allObjects];
array_display(setToArray); //随机获取Set中元素
id element = [set1 anyObject];
NSLog(@"随机获取其中的值%@", element); //比较两个Set是否相等
if ([set1 isEqualToSet:set2] == NO) {
NSLog(@"set1 != set2");
} //查看一个元素是否在一个set中
if ([set1 member:@"aa"]) {
NSLog(@"aa 在set1中");
} 、可变Set: NSMutableSet ​​.可变集合的实例化和初始化 ​ 便利初始化函数: -(id) initWithCapacity :(NSUInteger) numItems; ​ 便利构造器:+(id) setWithCapacity: (NSUInteger) numItems; ​ .往可变集合中添加元素 ​ ​-(void) addObject : (id) object; ​ ​.删除集合中的对象 ​ -(void) removeAllObjects; 删除所有的对象; ​ ​-(void) removeObjects: (id) object 删除其中某一个对象; 实例: //便利初始化函数分配大小
NSMutableSet *mutableSet1 = [[NSMutableSet alloc] initWithCapacity:];
NSMutableSet *mutableSet2 = [NSMutableSet setWithCapacity:]; //添加元素
[mutableSet1 addObject:@"aaa"];
[mutableSet1 addObject:@"BBB"];
[mutableSet1 addObject:@"bbb"]; //删除元素
[mutableSet1 removeObject:@"BBB"]; //遍历Set
NSArray *setArray = [mutableSet1 allObjects];
array_display(setArray);
 

ios 集合总结的更多相关文章

  1. iOS 集合的深复制与浅复制

    概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...

  2. 【推荐】iOS集合视图的可重新排序的layout

    在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...

  3. IOS集合NSSet与NSMutableSet知识点

    NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下.而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的 ...

  4. iOS集合视图单元格高亮和选中的区别

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  5. ios集合

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组) NSSet 用于对象无序集合 (集合) NSDic ...

  6. 李洪强iOS经典面试题上

    李洪强iOS经典面试题上     1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...

  7. 招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  8. 《招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  9. iOS开发面试题整理 (三)

    1. 风格纠错题 修改完的代码: typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : ...

随机推荐

  1. 修改textField的placeholder的字体和颜色

    textField.placeholder = @"username is in here!"; [textField setValue:[UIColor redColor] fo ...

  2. android 动态string

    android开发过程之中,动态的插入string内容时候使用, 例如, <string name="time">当前时间:<xliff:g id="p ...

  3. 正确使用Core Data多线程的3种方式

    在#Pragma Conference 2015会议上,Marcus Zarra,撰写过关于Core Data和Core Animation的书,叙述了三种在多线程环境下使用Core Data的方法并 ...

  4. Quicksum

    Quicksum Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...

  5. windows7旗舰版系统自带组件IIS搭建ftp

    1.win7,”开始“,打开”控制面板“,点击”程序“,看到”程序和功能“,如图所示: 2.点击”打开或关闭Windows功能“,如图所示: 3.成功后,打开”控制面板“,点击”系统和安全“,点击”管 ...

  6. wpf 数据绑定的4种形式

    1.source 2.element 3.relativesource 4.datacontent

  7. 关于css的hack问题

    <!--[if <keywords>? IE <version>?]> HTML代码块 <![endif]--> 取值: <keywords> ...

  8. 第19讲 不带参数功能FC的编程与应用

  9. JPA 系列教程17-继承-独立表-TABLE_PER_CLASS

    PerTable策略 每个具体的类一个表的策略 举例 这种映射策略每个类都会映射成一个单独的表,类的所有属性,包括继承的属性都会映射成表的列. 这种映射策略的缺点是:对多态关系的支持有限,当查询涉及到 ...

  10. jquety选择器

    基本选择器 1.#id        根据id的属性值来获取元素 2.TagName     根据标签名来获取元素 3.selector1,selector2    匹配列表中的选择器(就是可以匹配多 ...