swift 的集合set

集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。

集合类型语法

Swift 中的Set类型被写为Set<Element>,这里的Element表示Set中允许存储的类型,和数组不同的是,集合没有等价的简化形式。

创建和构造一个空的集合

你可以通过构造器语法创建一个特定类型的空集合:

var letters = Set<Character>()

此外,如果上下文提供了类型信息,比如作为函数的参数或者已知类型的变量或常量,我们可以通过一个空的数组字面量创建一个空的Set:

letters.insert("a")

// letters 现在含有1个 Character 类型的值

letters = []

// letters 现在是一个空的 Set, 但是它依然是 Set<Character>类型

由于 Swift 的类型推断功能,如果你想使用一个数组字面量构造一个Set并且该数组字面量中的所有元素类型相同,那么你无须写出Set的具体类型。

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

由于数组字面量中的所有元素类型相同,Swift 可以推断出Set作为favoriteGenres变量的正确类型。

遍历

Swift 的Set类型没有确定的顺序,为了按照特定顺序来遍历一个Set中的值可以使用sorted()方法,它将返回一个有序数组,这个数组的元素排列顺序由操作符'<'对元素进行比较的结果来确定.

for genre in favoriteGenres.sorted() {

print("\(genre)")

}

// prints "Classical"

// prints "Hip hop"

// prints "Jazz


集合操作

你可以高效地完成Set的一些基本操作,比如把两个集合组合到一起,判断两个集合共有元素,或者判断两个集合是否全包含,部分包含或者不相交。

基本集合操作

下面的插图描述了两个集合-a和b-以及通过阴影部分的区域显示集合各种操作的结果。



●使用intersection(_:)方法根据两个集合中都包含的值创建的一个新的集合。

●使用symmetricDifference(_:)方法根据在一个集合中但不在两个集合中的值创建一个新的集合。

●使用union(_:)方法根据两个集合的值创建一个新的集合。

●使用subtracting(_:)方法根据不在该集合中的值创建一个新的集合。

let oddDigits: Set = [1, 3, 5, 7, 9]

let evenDigits: Set = [0, 2, 4, 6, 8]

let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted()

// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

oddDigits. intersection(evenDigits).sorted()

// []

oddDigits.subtracting(singleDigitPrimeNumbers).sorted()

// [1, 9]

oddDigits. symmetricDifference(singleDigitPrimeNumbers).sorted()

// [1, 2, 9]

集合成员关系和相等

下面的插图描述了三个集合-a,b和c,以及通过重叠区域表述集合间共享的元素。集合a是集合b的父集合,因为a包含了b中所有的元素,相反的,集合b是集合a的子集合,因为属于b的元素也被a包含。集合b和集合c彼此不关联,因为它们之间没有共同的元素。



●使用“是否相等”运算符(==)来判断两个集合是否包含全部相同的值。

●使用isSubset(of:)方法来判断一个集合中的值是否也被包含在另外一个集合中。

●使用isSuperset(of:)方法来判断一个集合中包含另一个集合中所有的值。

●使用isStrictSubset(of:)或者isStrictSuperset(of:)方法来判断一个集合是否是另外一个集合的子集合或者父集合并且两个集合并不相等。

●使用isDisjoint(with:)方法来判断两个集合是否不含有相同的值(是否没有交集)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 .数组 Arrays 数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。这和O...
    iceMaple阅读 472评论 0 1
  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 1,128评论 0 4
  • 前言 3月27号苹果发布了Swift3.1,官方教程也更新到了3.1,查看更新记录发现更新的内容对之前的文章并没有...
    BoomLee阅读 3,158评论 0 4
  • 第一次偷用老爸的刮胡刀 没学会老爸的潇洒动作 只尝到了刀片划过皮肤的冰冷和疼痛 原来潇洒的背后是磨练和忍受 第一次...
    小李非刀阅读 392评论 0 0
  • 2017年8月23日 处暑 天鸽台风 小伙伴们出门记得带伞,早晚记得添衣,睡觉记得盖被噢~ 俗话说:“...
    lihua看世界阅读 420评论 5 6