<<Swift巩固笔记>> 第4篇 集合类型

191 阅读3分钟

前言

用Swift写了这么老长时间的项目, 确从来没有看过Swift官方文档, 全靠感觉, 大家有这样的情况吗?

基本定义

 Array 有序数据集

Set 无序无重复数据集

Dictionary 无序键值对的集

数组的创建

// 创建一个空数组
var someInts = [Int]()
print("items \(someInts.count)")

// 如何已知数组的类型信息, 可以这样使用
someInts = []
print(someInts)

// 带有默认值的数组
var someDoubles = Array(repeating: 0.0, count: 3)
print(someDoubles)

// 数组相加
var threeDoubles = Array(repeating: 2.5, count: 3)
var sixDoubles = someDoubles + threeDoubles
print(sixDoubles)

// 字面量构造数组, 通过推断, 数组类型为[String]
var shoppingList = ["eggs", "milk"]
print(shoppingList)

数组的访问和修改

// 数组中元素个数
print("The shopping list contains \(shoppingList.count) items")

// 数组是否空
if shoppingList.isEmpty {
    print("The shopping list is empty")
} else {
    print("The shopping list is not empty")
}

// 添加数据 单一元素 appen()
shoppingList.append("flour")

// 添加数据 多个元素
shoppingList += ["apple", "orange"]
print(shoppingList)

// 获取值: 单个元素
print("The first item is \(shoppingList[0])")

// 获取值: 多个元素
print("The some item is \(shoppingList[2...4])")

// 修改值: 单个元素
shoppingList[2] = "purple"

// 修改值: 多个元素
shoppingList[2...4] = ["banana"]

// 在某个位置添加元素
shoppingList.insert("peach", at: 1)

// 从某个位置移除某个元素
shoppingList.remove(at: 2)

数组的遍历

// 普通遍历
for obj in shoppingList {
    print(obj)
}

// 索引值, 元素值
for (index, value) in shoppingList.enumerated() {
    print("Item \(index): \(value)")
}

集合的创建

// 创建一个空的集合, 类型被推断为Set<Character>
var letters = Set<Character>()
print("\(letters.count) items")

// 当已知集合类型时, 可以直接这样置空
letters = []
print(letters)

// 用数组字面量创建集合
//var favouriteFruit: Set<Character> = ["apple", "orange", "banana"]

// 简化模式
var favouriteFruit: Set = ["orange", "apple", "banana"]

访问修改一个集合

// 集合中的个数
print(favouriteFruit.count)

// 集合是否为空
if letters.isEmpty {
    print("The Set is empty")
} else {
    print("The Set is not empty")
}

// 添加一个元素
favouriteFruit.insert("peach")

// 移除一个元素
if let removeFruit = favouriteFruit.remove("apple") {
    print("successed remove \(removeFruit)")
} else {
    print("failed remove")
}

if favouriteFruit.contains("banana") {
    print("the Set contains it")
} else {
    print("the Set don't contains it")
}

遍历一个集合

for fruit in favouriteFruit {
    print(fruit)
}

// 集合转换成数组, 再遍历
for fruit in favouriteFruit.sorted() {
    print(fruit)
}

集合的基本操作

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigits: Set = [2, 3, 5, 7]

// 两个集合的并集
print(oddDigits.union(evenDigits).sorted())

// 两个集合的交集
print(oddDigits.intersection(singleDigits).sorted())

// 一个集合中的值, 不在另一个集合中, 创建一个新的值
print(oddDigits.subtracting(singleDigits))

// 两个集合不相交的值创建一个集合
print(oddDigits.symmetricDifference(singleDigits).sorted())

集合中的成员关系

let houseAnimals: Set = ["dog", "cat"]
let farmAnimals: Set = ["cow", "chicken", "sheep", "dog", "cat"]
let cityAnimals: Set = ["bird", "mouse"]

// 一个集合中的所有值是否被包含在另一个集合中
print(houseAnimals.isSubset(of: farmAnimals))

// 一个集合是否包含另一个集合中的所有值
print(farmAnimals.isSuperset(of: houseAnimals))

// 两个集合是否不含有相同的值
print(farmAnimals.isDisjoint(with: cityAnimals))

创建字典

// 创建一个空字典
var nameofInts = [Int:String]()
print(nameofInts)

// 如果已知类型信息, 可以直接这样使用
nameofInts = [:]

// 字面量创建字典, 类型推断为 [String:String]
var airports = ["YYZ":"Toronto Pearson", "DUB":"Dublin"]

访问修改字典

// 字典中数据项数量
print("\(airports.count) items")

if airports.isEmpty {
    print("the airports dictionary is empty")
} else {
    print("the airports dictionary is not empty")
}

// 添加数据项
airports["LHR"] = "London"
print(airports)

// 修改数据项
airports["LHR"] = "London heathrow"

// 将某个键的值设置为nil, 来移除这个数据项
airports["APL"] = "Apple internation"
airports["APL"] = nil

字典遍历

for (airCode, airName) in airports {
    print("\(airCode) is \(airName)")
}

// 遍历字典的键
for airportCode in airports.keys {
    print("Airport code is \(airportCode)")
}

for airportName in airports.values {
    print("Airport name is \(airportName)")
}