前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS求两个数组里的相同元素

iOS求两个数组里的相同元素

作者头像
清墨
发布2019-04-23 15:50:37
2.4K0
发布2019-04-23 15:50:37
举报
文章被收录于专栏:清墨_iOS分享清墨_iOS分享

条件:对两个数组已经排好序

一:
代码语言:javascript
复制
    NSArray *A = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@13];
    NSArray *B = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12];

    NSMutableArray *newA = [[NSMutableArray alloc]initWithArray:A];

    NSInteger minB = [B[0] integerValue];  //取出B数组中最小的值
    for (int i=0; i<A.count; i++) {
        NSInteger minA = [A[0] integerValue];
        if (minA<minB) {
            [newA removeObjectAtIndex:i];
        }else{
            break;
        }
    }

    NSMutableArray *realA = [[NSMutableArray alloc]initWithArray:newA]; //这里注意要重新构建一个新数组,表示最终的在范围内的数组.
    NSInteger maxB = [B[B.count-1] integerValue]; //取出B数组中最大的值
    for (int i=newA.count-1; i>0; i--) {
        NSInteger maxA = [newA[i] integerValue];
        if (maxA>maxB) {
            [realA removeObjectAtIndex:i];
        }else{
            break;
        }
    }

    NSLog(@"%@",realA);


    for (int i=0; i<realA.count; i++) {
        NSNumber *valueA = realA[i];
        if ([B containsObject:valueA]) {
            NSLog(@"%@是在B数组里",valueA);
        }

    }

结果:

代码语言:javascript
复制
2019-04-16 10:09:57.922207+0800 SYAnswer[68108:3274705] (
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9
)
2019-04-16 10:09:57.922409+0800 SYAnswer[68108:3274705] 1是在B数组里
2019-04-16 10:09:57.922514+0800 SYAnswer[68108:3274705] 2是在B数组里
2019-04-16 10:09:57.922612+0800 SYAnswer[68108:3274705] 3是在B数组里
2019-04-16 10:09:57.922711+0800 SYAnswer[68108:3274705] 4是在B数组里
2019-04-16 10:09:57.922810+0800 SYAnswer[68108:3274705] 5是在B数组里
2019-04-16 10:09:57.922900+0800 SYAnswer[68108:3274705] 6是在B数组里
2019-04-16 10:09:57.922989+0800 SYAnswer[68108:3274705] 7是在B数组里
2019-04-16 10:09:57.923080+0800 SYAnswer[68108:3274705] 8是在B数组里
2019-04-16 10:09:57.923171+0800 SYAnswer[68108:3274705] 9是在B数组里

这个比起直接遍历做得优一点的地方在于先把A数组中元素剔除出来(范围在B内),然后再进行遍历,这也得益于数组已经排好序。

二.
代码语言:javascript
复制
    NSArray *array1 = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@13];
    NSArray *array2 = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12];
    
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    
    for (int i=0; i<array2.count; i++) {
        [dict setObject:array2[i] forKey:array2[i]];
    }
    
    for (int i=0; i<array1.count; i++) {
        NSNumber *value = [dict objectForKey:array1[i]];
        if (value) {
            NSLog(@"数组array1中%@在数组array2中",value);
        }
    }

结果:

代码语言:javascript
复制
2019-04-16 10:20:31.367393+0800 SYAnswer[68281:3279609] 数组array1中1在数组array2中
2019-04-16 10:20:31.367543+0800 SYAnswer[68281:3279609] 数组array1中2在数组array2中
2019-04-16 10:20:31.367638+0800 SYAnswer[68281:3279609] 数组array1中3在数组array2中
2019-04-16 10:20:31.367724+0800 SYAnswer[68281:3279609] 数组array1中4在数组array2中
2019-04-16 10:20:31.367813+0800 SYAnswer[68281:3279609] 数组array1中5在数组array2中
2019-04-16 10:20:31.367905+0800 SYAnswer[68281:3279609] 数组array1中6在数组array2中
2019-04-16 10:20:31.367998+0800 SYAnswer[68281:3279609] 数组array1中7在数组array2中
2019-04-16 10:20:31.368087+0800 SYAnswer[68281:3279609] 数组array1中8在数组array2中
2019-04-16 10:20:31.368176+0800 SYAnswer[68281:3279609] 数组array1中9在数组array2中

这种是以字典的形式来做的,效率相比第一种会更好一些。 我们这里有条件:数组是排过序的,这样也是可以借助第一种方案,先把array1内值筛选到array2的范围内,再进行最后的遍历操作,也算是一个优化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:
  • 二.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档