swift集合

9/23/2017

参考: https://developer.apple.com/ (opens new window)

集合中存储相同类型的不同值, 集合中没有定义的顺序。当项目的顺序不重要时,或者当您需要确保某个项目只显示一次时,可以使用集合而不是数组。set 中的值是 unique 的。

# 创建一个空 set

var letters = Set<Character>()
print("letters is of type Set<Character> with \(letters.count) items.")
// Prints "letters is of type Set<Character> with 0 items."


1
2
3
4
5

# 创建一个数组文字的集合

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
1

# 访问和修改 set

# insert

favoriteGenres.insert("Jazz")
1

# remove

favoriteGenres.remove("Rock") // 返回remove的item, 如果没有相应的item,返回nil
1

# removeAll

favoriteGenres.removeAll()
1

# contains

//是否set中包含特定的item
if favoriteGenres.contains("Funk") {
    print("I get up on the good foot.")
} else {
    print("It's too funky in here.")
}
// Prints "It's too funky in here."


1
2
3
4
5
6
7
8
9

# 遍历 set

for genre in favoriteGenres {
    print("\(genre)")
}
// Jazz
// Hip hop
// Classical

//set是无序的,如果要按照某中order, 可以使用sorted(), 返回一个排序的array

for genre in favoriteGenres.sorted() {
    print("\(genre)")
}
// Classical
// Hip hop
// Jazz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# set 属性

# count

print("I have \(favoriteGenres.count) favorite music genres.")
1

# isEmpty

if favoriteGenres.isEmpty {
    print("As far as music goes, I'm not picky.")
} else {
    print("I have particular music preferences.")
}
1
2
3
4
5

# set 操作

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

# intersection

两个集合的交集(common values)

# 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]

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 集合的关系(成员、相等)

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

# 是否相等

通过==来判断两个集合是否包含完全相同的值。

# 子集关系

isSubset(of:) 判断是不是某个集合的子集

# 父集关系

isSuperset(of:) 判断是不是某个集合的父集

# 真子集

isStrictSubset(of:) 判断是不是一个集合的子集,并且两个集合不相同

# 真父级

isStrictSuperset(of:) 判断是不是一个集合的父集,并且两个集合不相同

# 没有交集

isDisjoint(with:)

最后更新时间: 3/12/2021, 10:45:12 AM