博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)...
阅读量:4338 次
发布时间:2019-06-07

本文共 1502 字,大约阅读时间需要 5 分钟。

很久之前用过一次,后来就忘了。。。扎心,现在记录一下

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,但不属于list2print(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

你可能感兴趣的文章
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>