数组与集合

集合三大特性

  1. 确定性
  2. 互异性
  3. 无序性

集合运算

集合运算包括子集,叛等,交集,并集,补集,密集,在编程语言中仍然提供关于这些集合运算的数学方法

在iOS 中集合的编程模型对应NSSet 这个类,与数学理论保持一致,但对于编程语言来说,无法在编译时就确定元素是否有互异性,因此可以添加相同的元素,但内部添加相同的元素仅会保持一个。

 NSSet *set = [NSSet setWithObjects:@1,@2,@3,@1, nil];
 NSLog(@"%@",set);

打印结果

{(
    3,
    1,
    2
)}

可以看到我们在代码中放了2个NSNumber 类型的1,但编译器不会给我们报错,并且在内部保持了集合的统一性,另外需要注意的一点是,Set是无序的,或许会发现上面的代码无论怎么运行都是这个结果,3,1,2 ,虽然每次打印的结果一致,但打印与我们代码放入的顺序无关,所以把set当做一系列没有顺序也没有索引的对象集合即可。

集合与数组有一个共同点,就是没有键值,仅仅是一个一个对象,只不过数组是有序的,而集合是无序的

集合优点:
集合灵活,并且检查元素是否存在此时比数组更快。而且对于可变的数组和集合来说,集合增删更快

适合集合的例子

假如现在正在做一个页面,这个页面是中国所有城市的列表,可以选中任意个数的城市,如果已经选中,在单击则取消选中。这样或者类似的场景比如说,购物车也是一样。
我们可能需要维护一个数组或者集合,来存放选中的城市,当用户单击某一个城市的时候,需要判断这个城市是否已经被选中,而被选中的判断来自是否是你在的数组或集合中。这个时候用数组,需要调用数组的containsObject:来判断是否存在,如果选中城市的数组量比较少还好,如果很多,甚至到几百个,在加上找到之后做增删处理,虽然处理器速度很快,但此时数组以及不如集合了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值