zoukankan      html  css  js  c++  java
  • 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~

     
  • 相关阅读:
    Nginx 使用 X-Accel-Redirect 实现静态文件下载的统计、鉴权、防盗链、限速等
    SpringCloud的Feign相关调用,熔断源码分析
    SpringCloud之熔断(六)
    lambda与java8函数式编程
    CompletableFuture基本使用
    RabbitMq消费者在初始配置之后进行数据消费
    文件监控性能问题【BUG】
    element穿梭框el-transfer增加拖拽排序和shift多选checkbox功能
    RPC序列化方式优缺点
    部署企业私密信息管理平台Hashicorp vault集成kubernetes和AWS的密钥信息
  • 原文地址:https://www.cnblogs.com/yajunLi/p/10437884.html
Copyright © 2011-2022 走看看