Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)
Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)
很久之前用过一次,后来就忘了。。。扎心,现在记录一下
PS:这几种函数其实不限于swift内的,在JavaScript、python、DB等其他语言,应该也有类似用法,这里我只简单讲了在swift内的用法。
一、概念介绍
intersection(_ :) 创建一个只包含两个公共值的新集合。(交集) symmetricDifference(_ :) 创建一个新集合,其值集在两个集合中,但不能同时存在。(非交集) union(_ :) 创建一个包含两个集合中的所有值的新集合。(合集) subtracting(_ :) 创建一个值不在指定集中的新集。(补集)
二、举个例子
我们新建一个playground(方便测试)
let list1:Set = ["1","2","3"] let list2:Set = ["2","3","4"] //list1和list2都有的 print(list1.intersection(list2)) //既不在list1,也不在list2内 print(list1.symmetricDifference(list2)) //list1和list2加起来的所有数据,但不会重复 print(list1.union(list2)) //属于list1,但不属于list2 print(list1.subtracting(list2))
结果:
此外,Set还有其他几种方法:
集合的成员和相等(Set Membership and Equality) 通过"=="判断两个集合是否包含所有相同的元素 通过"isSubset(of:)"方法判断前者是否是后者的子集。 通过"isSuperset(of:)"方法判断后者是否是前者的子集。 通过"isStrictSubset(of:)"或者"isStrictSuperset(of:)"判断是否是真子集(为子集,且不相等)。 通过"isDisjoint(with:)"方法判断两个集合是否有相同的元素,就是判断两个集合是否有交集。 let s1: Set = ["1", "2"] let s2: Set = ["1", "2", "3", "4", "5"] let s3: Set = ["4", "5"] s1.isSubset(of: s2) // true s2.isSuperset(of: s1) // true 3.isDisjoint(with: s2) // true
补充一下:
目前在swift中,以上函数只能用于集合类(Set <Element>),但如果我们用的是其他集合类型,比如数组([int])、字典([Int: String])
我们需要先转换下类型,如下:
let list1:[String] = ["1","2","3"] let list2:[String] = ["2","3","4"] let s1 = Set(list1) let s2 = Set(list2) print(s1.intersection(s2)) print(s1.symmetricDifference(s2)) print(s1.union(s2)) print(s1.subtracting(s2))
有时候,当需要对数据进行类似处理,用集合可以简单的实现以上效果。
enjoy~
原文地址https://www.cnblogs.com/yajunLi/p/10437884.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
http请求使用代理,nginx 400 bad request
事件: 公司的安卓app部分接口使用抓包工具时,如Charles。 返回400错误。 后端使用nginx服务,php语言。 分析问题: 1、安卓不使用抓包工具,可以正常请求接口数据 2、nginx同时对android、ios提供服务,ios正常 3、安卓只有使用代理工具,才会出现400 有此可见, 问题出在代理工具上。 为什么ios使用同一个代理工具没有问题? 百度、google说 由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。 又有文章说,http cookie值太大,http头部信息错误等 然后按照网上的方法修改了请求数据和nginx缓存配置,nginx依旧无情的返回400,网上的解决方案基本上都试过了,依旧没有解决问题。将接口的Url放在firefox里访问,可以正常请求。那会不会是代理工具做转发时修改了http请求的信息? web代理工具的原理: 一般的代理工具是将本地客户端的请求先发送给代理,然后由代理向服务器发送请求,代理接收到服务器回复后,将其再转发给客户端。 这么来看,很有可能是代理工具在做http转发时,修改了请求信息。 api的访问方式...
- 下一篇
资本寒冬下的android面经
声明:作者:璇_c2be链接:https://www.jianshu.com/p/089861329c1a 在2018年10月初,公司倒闭,无奈走上找工作的道路,不想自己平时图安逸,不思进取,再次找工作才发现,android行业也不是站在风口上,猪也能吹上天的世道了.作为技术小菜的我,再找工作那几个月真是战战兢兢,被打击得信心全无.记录下我的面试经历,分享给需要的人.勉励自己要时时进步,才不会被淘汰. 猎豹移动:(有笔试) atomicinteger内存模型 static编译时有啥不同,static 语句块,static变量,static方法,构造初始化顺序(静态绑定) animation和animator的用法,概述实现原理 Handler,looper,messagequeue,thread,message,每个类功能,关系? Mvc,mvp的差异 app闪退的原因有哪些?每种情况简述分析过程 如果一个app存在多进程,请列出全部的ipc方法 操作系统中进程和线程有什么联系和区别,系统什么时候会在用户态和内核态中切换? 如何加载ndk库?如何在jni中注册native函数,有几种注...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境