swift 6.1 集合

swift 6.1 集合

标签:swift

集合和数组基本是一样的类型,只不过是集合是无序的,而且是没重复的。

集合的声明

声明集合用关键字Set。必须显示声明类型,不然会被认为是数组

var skillsOfA: Set<String> = ["swift","OC"]

集合的用法

//: Playground - noun: a place where people can play

import UIKit

var str = "Hello,playground"

// 0. 声明一个集合用set关键字
var set1:Set<String> = ["a","b","c"]

// 1. 声明一个空的集合

var emptySet1: Set<String> = []
var emptySet2 = Set<Int>()

// 2. 或者直接用set,不用申明类型,swift自己去判断

var set2:Set = [1,2,3,4,5,6,7,]
print(set2) // [2,4,5,6,7,3,1] 无顺序,且去重了。

// 3. 或者用set 将一个数组转换成 集合

var set3 = Set([1,5])
print(set3) // [5,2,1,4] 无顺序,且去重了。

//4. count 求集合的长度
set3.count // 5 去重复的大小
emptySet1.count // 0

// 5. isEmpty 判断集合是否为空,是返回true,不为空则返回false
set3.isEmpty //false
emptySet1.isEmpty //true

// 6. first 获取集合的第一个元素,返回可选的元素值
var a = set3.first
print(a) // Optional(5) 可选的5

// 7. contains 集合中是否包含 一个元素,是返回true,不包含则返回false

var b = set3.contains(2) // true

// 8. 遍历一个集合
for i in set3{
    print(i) // 5 2 3 1 4
}

// 9. 比较2个集合,用 == 比较。去重后比较。

var set4:Set = [1,3]
var set5:Set = [3,1]
set4 == set5 // true

//10 .insert 往集合里面插入一个元素,无须插入。
var set6:Set<String> = []
set6.insert("PHP")
set6.insert("js")
set6.insert("python")
set6.insert("PHP") // 重复就插入不进去了。
print(set6) // ["js","PHP","python"]

//11. remove 删除一个元素,返回的可选的,因为可能不存在。
var js = set6.remove("js")
print(js) // Optional("js")

//删除没有的元素
set6.remove("swift") // 返回 nil

//所以可以用if let 解包
if let PHP = set6.remove("PHP"){
    print("PHP is remove") // PHP is remove
}

//12. removeFirst 移除集合的第一个元素
var s = set6.removeFirst()
print(s) // python

//13. removeAll 移除集合所有的元素
set6.removeAll()
print(set6) // [] 空得集合了

//14. union 求2个集合的并集,就也就是合并2个集合。

var skillsOfA: Set<String> = ["swift","OC"]
var skillsOfB: Set<String> = ["HTML","CSS","Javascript"]
var skillsOfC: Set<String> = []

var cc = skillsOfA.union(skillsOfB)
print(cc) // ["swift","CSS","OC","Javascript","HTML"]
print(skillsOfA) // skillsOfA 还是保持原样的["OC","swift"]

//unionInPlace 并集后并替换原来的值。
skillsOfA.unionInPlace(skillsOfB)
print(skillsOfA) // skillsOfA 改变了:["swift","HTML"]

//15. intersect 求2个集合的交集,也就是求2个集合公共的元素。
skillsOfA.intersect(skillsOfB) // 共有 ["HTML","Javascript"]
skillsOfA.intersectInPlace(skillsOfB) // 替换了skillsOfA的值
print(skillsOfA) // A 的值改变了:["HTML","CSS"]

//16. subtract 求2个集合的减集,也就是求2个集合没公共的部分。
skillsOfA.subtract(skillsOfB) // [] 2个集合一样
skillsOfA.subtract(skillsOfC) // ["HTML","CSS"]
skillsOfA.subtractInPlace(skillsOfB) // 改变了集合A的值了。


//16. exclusiveOr 异或,在A中不存在,在B中存在。
skillsOfA.exclusiveOr(skillsOfB) //A 现在是空,就返回了B得元素 ["HTML","CSS"]
skillsOfA.exclusiveOrInPlace(skillsOfB) // 改变了A元素的值。["HTML","CSS"]

//17. isSubsetof 子集,判断一个集合A是否是集合B的子集。也就是B集合里包含A。返回true和false

skillsOfA.isSubsetof(skillsOfB) //true
skillsOfC.isSubsetof(skillsOfB) //true //空集合是任意集合的子集

//18. isSupersetof 超集,判断一个集合A是否是一个集合的父亲。也就是A集合里包含B。返回true和false

skillsOfA.isSupersetof(skillsOfB) //true
skillsOfA.isSupersetof(skillsOfC) //true //任何集合都是空集合的超集

//19. isstrictSupersetof 真超集。isstrictSubsetof 真子集。A是B的超集,若A中一定有B中没有的元素,则A是B的真超集,B是A的真子集。

skillsOfA.isstrictSupersetof(skillsOfB) //false 
skillsOfA.isstrictSubsetof(skillsOfB) //false

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...