Swift 笔记:集合类型


Apple-Swift-logo

Swift 语言提供数组(Arrays)、集合(Sets)和字典(Dictionaries)三种基本的集合类型来存储数据。数组是有序数据的集,集合是无序无重复数据的集,字典是无序的键值对的集。

CollectionTypes-intro

Arrays、Sets、Dictionaries 中存储的数据值类型必须明确,不能把不正确的数据类型插入其中。如果创建一个集合并分配为变量,那么这个集合将会是可变的;如果分配成变量,那么这个集合就是不可变的,它的大小和内容都不能被改变。

数组 Array

数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。

数组基本语法

Swift 数组的写法可以使用 Array<Element> 的形式,也可以直接使用 [Element] 这样的简单语法,其中 Element 是这个数组中唯一允许的数据类型:

var vowels1: Array<String> = ["A", "E", "I", "O", "U"]
var vowels2: Array = ["A", "E", "I", "O", "U"]
var vowels3: [String] = ["A", "E", "I", "O", "U"]
var vowels4 = ["A", "E", "I", "O", "U"]

创建一个由特定数据类型构成的空数组,可以使用下面几种方式:

var emptyArray1: [Int] = []
var emptyArray2: Array<Int> = []
var emptyArray3 = [Int]()
var emptyArray4 = Array<Int>()

如果需要创建一个带有默认值的数组:

var fiveDoubles = [Double](repeating: 0.0, count: 5)
var fiveDoubles2 = Array(repeating: 0.0, count: 5)

可以使用加法操作符(+)来组合两种已存在的相同类型数组。新数组的数据类型会被从两个数组的数据类型中推断出来。

访问和修改数组

  • count:获取数组中数据项的数量
  • isEmpty:判断数组是否为空
  • append(_:):在数组后添加新的数据项
  • insert(_:at:):在某个具体索引值之前添加数据项
  • first/last:获取数组第一个/最后一个数据
  • remove(at:):移除数组中的某一项
  • max/min:获取数组中最大值/最小值
  • contains:判断是否包含某个数据

数组遍历

我们可以使用 for-in 循环来遍历所有数组中的数据项:

shoppingList = ["Chocolate Spread", "Cheese", "Butter"]、

for item in shoppingList {
    print(item)
}
// Chocolate Spread
// Cheese
// Butter

集合 Set

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

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

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

集合操作

  • 使用 intersection(_:) 方法根据两个集合中都包含的值创建的一个新的集合。
  • 使用 symmetricDifference(_:) 方法根据在一个集合中但不在两个集合中的值创建一个新的集合。
  • 使用union(_:) 方法根据两个集合的值创建一个新的集合。
  • 使用subtracting(_:) 方法根据不在该集合中的值创建一个新的集合。
  • 使用是否相等运算符(==)来判断两个集合是否包含全部相同的值。
  • 使用 isSubset(of:) 方法来判断一个集合中的值是否也被包含在另外一个集合中。
  • 使用 isSuperset(of:) 方法来判断一个集合中包含另一个集合中所有的值。
  • 使用 isStrictSubset(of:) 或者isStrictSuperset(of:) 方法来判断一个集合是否是另外一个集合的子集合或者父集合并且两个集合并不相等。
  • 使用 isDisjoint(with:) 方法来判断两个集合是否不含有相同的值(是否没有交集)。

字典 Dictionary

字典是一种存储多个相同类型的值的容器。每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符,字典中的数据项并没有具体顺序。

字典基本语法

Swift 的字典使用 Dictionary<Key, Value> 定义,其中 Key 是字典中键的数据类型,Value 是字典中对应于这些键所存储值的数据类型。也可以用 [Key: Value] 这样简化的形式去创建一个字典类型:

var airports1: Dictionary<String, String> = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports2: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports3 = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

使用下标语法获取字典某个数据值时,以键值作为下标索引:

print(airports1["DUB"])
// Optional("Dublin")

#EOF