美文网首页
数组 集合 操作

数组 集合 操作

作者: 蚂蚁揍蜗牛 | 来源:发表于2018-08-13 17:31 被阅读0次

1、求数组的 交集,并集,差集

NSArray *array1 = @[@"1",@"2",@"3"];
NSArray *array2 = @[@"1",@"5",@"6"];
NSMutableSet *set1 = [NSMutableSet setWithArray:array1];
NSMutableSet *set2 = [NSMutableSet setWithArray:array2];
[set1 unionSet:set2];       //取并集后 set1中为1,2,3,5,6
[set1 intersectSet:set2];  //取交集后 set1中为1
[set1 minusSet:set2];      //取差集后 set1中为2,3,5,6
备注:利用了集合的api进行数组的验证

2、判断一个数组是否为另一个数组的子集

NSArray *array3 = @[@"1",@"2"];
NSArray *array4 = @[@"1",@"2",@"6"];
NSSet *set3 = [NSSet setWithArray:array3];
NSSet *set4 = [NSSet setWithArray:array4];
 
BOOL isSub = [set3 isSubsetOfSet:set4];     //isSub为YES

3、判断某个对象是否在某个数组中

BOOL isExist = [array3 containsObject:@"1"]; //isExist为YES

4、数组倒叙的方法

NSArray *array = @[@"name", @"w", @"aa", @"ZXPing"];
[array reverseObjectEnumerator]

5.数组遍历方法选择

1、for 循环 
  可以正序、逆序查询数据。也常用于创建九宫格。
2、for in 循环
  forin 遍历 又称快速遍历,与for循环最明显的区别就是看不到循环次数及索引情况。
  数组是有序的 for循环过程中也是有序的,forin遍历过程中是根据数组中数据添加顺序而定的。
3、枚举器
枚举器是一种苹果官方推荐的更加面向对象的一种遍历方式,
相比于for循环,它具有高度解耦、面向对象、使用方便等优势

//正序遍历数组
[self.traverseArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSLog(@"正序%@",obj);
}]
//逆序遍历数组
[self.traverseArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         NSLog(@"逆序%@",obj);
}] 

//遍历字典
#warning 字典是无序的不存在正序逆序
[self.traverseDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
        NSLog(@"key:%@->value%@",key,value)      
}]
注意:当需要结束循环的时候,调用stop,赋予YES 则结束循环,如:*stop = YES;

此方法方法的优点:
1.遍历顺序有正序/倒序/并发混序三种, 可根据枚举值控制比 for循环方便许多. 
2.遍历中自带 *stop参数, 跳出方便. 
3.可以在遍历的 block中增删数据, 比 forin遍历方便许多 
4.dispatch_apply函数
  GCD dispatch_apply函数是一个同步调用,block任务执行n次后才返回。
  该函数比较适合处理耗时较长、迭代次数较多的情况。
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_apply(array.count, queue, ^(size_t insex) {
        NSLog(@" dispatch_apply  %@",array[insex]);
    });
备注:性能比较
循环100次 : 枚举器=0.0294s > dispatch_apply=030285s > for =0.0281s > for in=0.0271s      
循环10000次:for in=2.8060s >枚举器=2.7792s  > for =2.7147s > dispatch_apply=2.5359s
循环100000次:枚举器=31.9950s  > for in=28.0213s > for =27.2070s > dispatch_apply=25.3876s
所以当 循环次数不高时,三种相差不大,但是当处理比较耗时且循环次数相对较多时,使用异步的dispatch_apply,枚举器的性能相对较差

相关文章

  • 数组 集合 操作

    1、求数组的 交集,并集,差集 2、判断一个数组是否为另一个数组的子集 3、判断某个对象是否在某个数组中 4、数组...

  • 集合框架

    集合框架:方便对多个数组操作集合与数组的区别 集合:长度可变 存储不同类型的元素 只可以存储引用类型 数组...

  • Gradle开发-Groovy集合&数组

    #Groovy 集合 列表集合的定义和元素的操作; 数组的定义和元素的操作; 键值对集合的定义和元素的操作; 范围...

  • ArrayList和LinkedList区别

    1、ArrayList是数组实现的集合操作,而LinkedList是链表实现的集合操作。2、使用List集合的ge...

  • KVC Collection Operators(集合操作)

    集合操作:一个集合/数组通过调用valueForKeyPath:可允许一个集合中的对象属性根据集合操作符做相应的操...

  • 2020-04-22 java 中的集合Collection

    Collection 集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:...

  • 集合框架

    集合框架的概念 集合:存放数据的容器 集合框架:java中,用于表示集合,以及操作集合的类和接口的统称 数组与集合...

  • 八 JDK8新特性——第二节 Stream流式思想

    1、使用传统的方式遍历集合 Stream 流有别于I/O流,是对集合和数组进行操作,解决集合数组的弊端 2、使用S...

  • Day09 常用集合以及集合操作符

    1、数组类型2、集合类型1、List2、Map3、Set3、集合操作符操作符1、toMutableList()2、...

  • Arrays

    Arrays:用于操作数组的工具类。里面都是静态方法。 asList:将数组变成list集合。

网友评论

      本文标题:数组 集合 操作

      本文链接:https://www.haomeiwen.com/subject/pouubftx.html