集合Sets(集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组)
现将学习中的用法代码贴出:
//集合Sets(集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组)
//创建和构造一个空的集合
let letters = Set<Character>()
print("letter is of type Set<Character> with \(letters.count) items.")//打印 letter is of type Set<Character> with 0 items.
//用数组字面量创建集合
var favoriteFruits:Set<String> = ["apple","banana","pear","orange","watermelon"]//这个favoriteFruits变量被声明为“一个String值的集合”,写为Set<String>。由于这个特定的集合含有指定String类型的值,所以它只允许存储String类型值
print(favoriteFruits)//打印 ["orange", "watermelon", "apple", "pear", "banana"]
//一个Set类型不能从数组字面量中被单独推断出来,因此Set类型必须显式声明。然而,由于 Swift 的类型推断功能,如果你想使用一个数组字面量构造一个Set并且该数组字面量中的所有元素类型相同,那么你无须写出Set的具体类型。favoriteGenres的构造形式可以采用简化的方式代替:
/*例*/
//var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
/**访问和修改集合*/
//获得Set中元素的数量 使用只读属性count
print("I have \(favoriteFruits.count) favorite fruits")//打印 I have 5 favorite fruits
//判断Set 的count属性是否为0 (isEmpty)
if favoriteFruits.isEmpty{
print("count 是空的为0")
}else{
print("count不是空的有 \(favoriteFruits.count) 个值")
}//打印 count不是空的有 5 个值
//在Set中添加一个新元素(通过调用Set的insert(_:)方法)
favoriteFruits.insert("cherry")//给favoriteFruits添加一个新元素cherry(樱桃)
print("favoriteFruits insert results:\(favoriteFruits)")//打印favoriteFruits insert results:["orange", "cherry", "watermelon", "apple", "pear", "banana"]
//可以看出Set是无序的
//删除Set中的元素(通过调用Set的remove(_:)方法去删除一个元素,如果该值是该Set的一个元素则删除该元素并且返回被删除的元素值,否则如果该Set不包含该值,则返回nil。另外,Set中的所有元素可以通过它的removeAll()方法删除)
if let removeFruits = favoriteFruits.remove("pear"){
print("\(removeFruits): Bad I got the master abandon!")
}else{
print("I never much cared for that.")
}//打印 pear: Bad I got the master abandon!
//判断Set中是否包含某个值(使用contains(_:)方法去检查Set中是否包含一个特定的值)
if favoriteFruits.contains("orange"){
print("Contains in it")
} else {
print("Does not contain among them")
}//打印 Contains in it
//集合的遍历
for fruits in favoriteFruits{
print("遍历的结果:\(fruits)")
/*打印
遍历的结果:orange
遍历的结果:cherry
遍历的结果:watermelon
遍历的结果:apple
遍历的结果:banana
*/
}
//按照特定顺序来遍历
//Swift 中的Set类型没有确定的顺序,为了按照特定顺序来遍历一个Set中的值可以使用sorted()方法,它将返回一个有序数组,这个数组的元素排列顺序由操作符'<'对元素进行比较的结果来确定.
for sortingfruits in favoriteFruits.sorted(){
print("The results of the sort:\(sortingfruits)")
/*打印
The results of the sort:apple
The results of the sort:banana
The results of the sort:cherry
The results of the sort:orange
The results of the sort:watermelon
*/
}
//集合的操作
/*1.使用intersection(_:)方法根据两个集合中都包含的值创建的一个新的集合。
2.使用symmetricDifference(_:)方法根据在一个集合中但不在两个集合中的值创建一个新的集合。
3.使用union(_:)方法根据两个集合的值创建一个新的集合。
4.使用subtracting(_:)方法根据不在该集合中的值创建一个新的集合。*/
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
print("根据两个集合中都包含的值创建的一个新的集合:\(oddDigits.intersection(evenDigits).sorted())")//打印 根据两个集合中都包含的值创建的一个新的集合:[]
print("根据在一个集合中但不在两个集合中的值创建一个新的集合:\(oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted())")//打印 根据在一个集合中但不在两个集合中的值创建一个新的集合:[1, 2, 9]
print("根据两个集合的值创建一个新的集合:\(oddDigits.union(evenDigits).sorted())")//打印 根据两个集合的值创建一个新的集合:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("根据不在该集合中的值创建一个新的集合:\(oddDigits.subtracting(singleDigitPrimeNumbers).sorted())")//打印 根据不在该集合中的值创建一个新的集合:[1, 9]
//集合成员间的关系以及是否是相等
/*
1.使用“是否相等”运算符(==)来判断两个集合是否包含全部相同的值。
2.使用isSubset(of:)方法来判断一个集合中的值是否也被包含在另外一个集合中。
3.使用isSuperset(of:)方法来判断一个集合中包含另一个集合中所有的值。
4.使用isStrictSubset(of:)或者isStrictSuperset(of:)方法来判断一个集合是否是另外一个集合的子集合或者父集合并且两个集合并不相等。
5.使用isDisjoint(with:)方法来判断两个集合是否不含有相同的值(是否没有交集)。
*/
let houseAnimals: Set = ["dog", "cat"]
let farmAnimals: Set = ["cow", "chicken", "sheep", "dog", "cat"]
let cityAnimals: Set = ["bird", "mouse"]
let results1 = houseAnimals.isSubset(of: farmAnimals)
// true
let results2 = farmAnimals.isSuperset(of: houseAnimals)
// true
let results3 = farmAnimals.isDisjoint(with: cityAnimals)
// true
print(results1,results2,results3)