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

时间: 2024-10-09 15:04:24

Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)的相关文章

Swift中数组集合-b

数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1:Array<String> var studentList2: [String] 声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1:Array<String> = ["张三","李四&

Swift 2.0学习笔记(Day 17)——Swift中数组集合

原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1: Array<String> var studentList2: [String] 声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1: Array<String> =

《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合

原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. var studentList1:Array<String>    var studentList2: [String] 声明的Array还不能用,还需要进行初始化 ,Array类型往往在声明的同时进行初始化.示例代码如下: var studentList1:Array<String> 

sas中的sql(5) 纵向操作数据集 Except、Intersect、Union、OuterJoin

SQL进行纵向操作的基本语法 proc sql; select * from table1 set-operator <all> <corr> select * from table2 set-operator <all> <corr> select * from table3; 1:几种set操作符 Except.Intersect.Union.OuterJoin Except.Intersect.Union三种set符号是默认进行unique处理,当进行

Swift中的集合类型

一.引子: 在2014年10月TIOBE编程语言排行榜中,Swift位居第18位,从2014WWDC发布会首次公布至今不到半年时间,swift一直受到编程人员的追捧,其热衷程度并不亚于当红巨星Taylor Swift.相信在不远的将来,swift能够平稳发展,并逐步取代Objective-C. 二.swift的集合类型 下面回归主题.作为一名iOS开发者,我们已经非常熟悉诸如NSArray,NSDictionary,NSSet等常见集合类型,以及它们的可变同类NSMutableArray,NSM

Java中List集合遍历的三种方式

首先创建一个List集合: List<String> list = new ArrayList<String>();list.add("name"); list.add("age"); list.add("sex"); 第一种:利用集合的size()方法遍历for(int i= 0:i<list.size();i++){ list.get(i);} 第二种:for增强循环for(String string : str

关于JAVA中HashMap集合的的三种超不好记的便利方案

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类 1:先创建一个类 1 package Day; 2 3 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java

MYSQL 时间计算的 3 种函数

方法 1. 加法 adddate('date_expression',interval value type); 'date_expression' + interval value type; ---------------------------------------------------------------------------------------------------------------------------------- addtime(datetime_expr

JAVA 从键盘中输入成绩计算平均成绩以及函数的调用

import java.util.Scanner; public class Test { public static void main(String[] args) { //创建一个学生对象 Student s = new Student(); //创建一个学生成绩对象 StudentScore sc = new StudentScore(); //从控制台接收学生成绩 Scanner input = new Scanner(System.in); //提示用户输入学生成绩 System.o