Objective-c:集合类型

简介

  • OC语言的集合不再是单纯的数组,而是分为3大类:数组NSArray,字典NSDictionary,集NSSet;平常使用的集合都是这3类,或者他们的子类;

  • OC语言的所有集合都是对象,集合中的元素也都是对象,集合中也只能存放对象;

  • 简单及复杂数据类型(int、double、CGPoint、CGRect)可以封装为NSValue、NSNumber对象再放入集合类中;

  • 集合中不能存放nil空对象,nil是作为集合结束标识符;

  • OC集合没有多维的概念,也就是不会出现根本意义上的二维数组,我们可以简单的这样理解:在数组中存放了一个对象,这个对象是数组;

  • 集合的所有运算依赖于方法,但是多数情况下依旧要使用循环;

数组

简介

  • OC中的集合类只能收集cocoa对象(NSObject对象),C数据类型(例如:int、float、double、BOOL等),需要封装成NSNumber类型的,才可以保存在集合类中。(NSNumber对象是cocoa对象)。

  • OC中的数组同C语言中的数组非常接近,常见的用法首先是创建数组,然后对数组进行操作。

  • OC中数组分为不可变数组(NSArray)和可变数组(NSMutableArray) ,且只能存储Object-C对象。

  • NSArray在初始化的同时一般需要指定它所包含的元素,以nil作为结束标志,初始化中不能包含空对象。

  • NSArray是不可变数组,数组存放的对象个数和每个对象都不可改。

NSArray

  • 重要方法

    这里写图片描述

  • 删除元素:subarrayWithRange:方法截取掉数组中的某一段,然后返回一个新数组,其用法与NSString类型的截取基本一致。

  • 数组排序:

    • sortedArrayUsingSelector:方法通过指定的compare:方法进行排序,这里直接使用了NSString类型的compare:方法,为默认的排序方法,也可以使用自定义方法,@selector(自定义方法名)。

    • 对数字数组排序时,需要将数字加入数组,首先要转换成NSNumber。然后再使用sortedArrayUsingSelector:,在取出数字元素时也要转换类型。

    • 对对象数组排序,使用NSSortDescriptor。

NSMutableArray

  • 可变数组NSMutableArray,继承自NSArray,拥有父类的全部特性;

  • 常用方法

    这里写图片描述

Tips:

NSMutableArray的方法,直接对数组自身进行操作,没有返回值。

数组遍历

  • for 循环遍历
for (int i = 0; i < [array count]; i++) {
    // 依次取出数组每个元素
    id obj = [array objectAtIndex:i];
}
  • 快速枚举遍历
// 使用一个迭代变量逐个替代数组中的每个对象,然后直接使用这个对象进行运算

for (id obj in array) {
    // obj do something
}

Tips:

如果遍历的数组是可变类型,一定不要在循环体中进行添加或移除操作,一般先记录对象,循环结束后再整体添加或删除。

数组简化

Xcode4.5版本以后的简化操作:

1、[NSArray array]  简写为 @[]
NSArray *array = @[];

2、[NSArray arrayWithObject:a]  简写为 @[ a ]
NSArray *array = @[@"Hello"];

3、[NSArray arrayWithObjects:a,b,c]  简写为 @[ a,b,c ]
NSArray *array = @[@"a", @"b", @"c"];

Tips

1、简化适合不可变数组,不推荐可变数组使用。想得到可变版本的话,可以对其发送 -mutableCopy 消息以生成一份可变的拷贝。

示例: NSMutableArray *numbers = [@[@1, @2, @3, @4, @5] mutableCopy];

2、对于标记为static的数组,不能使用简写为其赋值。

字典

简介

  • 字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。即:存储方式为通过 键-值 对的方式来存放数据的一种无序集合。

  • 字典也被称为散列表或关联数组。

  • 不同于数组,字典使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。

  • 一般通过key来操作object。某种意义上,对字典的运算实际上就是对key值的运算。

  • 字典分为不可变字典NSDictionary和可变字典NSMutableDictionary。

NSDictionary

  • 常用方法

    这里写图片描述

Tips

1、键不可以重复,值可以

2、当设置的key值与原有key值重复时,会直接覆盖原来的键值对,这也是更改字典数据的方法。

NSMutableDictionary

  • 常用方法

    这里写图片描述

Tips

1、setObject:forKey:方法,如果在字典中无法找到该key,则做添加处理

字典简化

Xcode4.5版本以后的简化操作

1、[NSDictionary dictionary] 简写为@{}
NSDictionary *dictionary = @{};

2、[NSDictionary dictionaryWithObject:forKey:]  简写为:@{key:value}
NSDictionary *dictionary = @{@"name": @"Admin”};

3、[NSDictionary dictionaryWithObjectsAndKeys:ob1,key1,ob2,key2}  简写为:@{key1:ob1 , key2:ob2};
NSDictionary *dictionary = @{@"one": @"rice",@"two":@"sleep"};

Tips

1、简化适合不可变字典,不推荐可变字典使用。

简介

  • NSSet对象中不能存放重复对象,如果出现重复,最终只会保留一个,NSSet也常用来清除其他集合中的重复对象。

  • 集,类似数组,但区别于数组,其特点是:无序不重复;

  • 集分为可变集 NSSet 与不可变集 NSMutableSet;

NSSet

  • 初始化
// 1、alloc + init
- (instancetype)initWithObjects:(ObjectType)firstObj, ... ;

// 2、遍历构造
+ (instancetype)setWithObjects:(ObjectType)firstObj, ...;
  • 常用方法与属性
1、获取元素个数
- (NSUInteger)count;

2、获取任意元素
- (nullable ObjectType)anyObject;

3、获取所有元素
@property (readonly, copy) NSArray<ObjectType> *allObjects;

4、查询是否包含某一元素
- (BOOL)containsObject:(ObjectType)anObject;

NSMutableSet

  • 常用方法
// 1、添加元素
- (void)addObject:(ObjectType)object;

// 2、删除元素
- (void)removeObject:(ObjectType)object;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值