Swift三种主要的集合类型:Array、Set、Dictionary
一、数组Array
数组的类型写法: Array<String> (读作:存储字符串的数组) 或者简写为[String]
初始化
// 初始化器创建一个数组
var someInts =[Int] ()
// 字面量创建一个数组
var someCharacters : Array<String> = ["a","b","c","d","e","f"]
// 等同于
var someCharacters : [String] = ["a","b","c","d","e","f"]
// swift同样可以类型判断,一下写法,系统默认是Array<String>类型
var someCharacters = ["a","b","c","d","e","f"]
- 访问和修改数组:
count属性检查数组中的元素数量
print( "The someCharacters contains ( someCharacters.count) items.")
isEmpty属性检查count属性是否为0
if someCharacters.isEmpty {
print("The someCharacters list is empty.")
} else {
print("The someCharacters list is not empty.")
}
append(_:)方法在数组末尾添加新元素
someCharacters.append("g")
加赋值运算符(+=)在数组末尾添加一个或者多个同类型元素
someCharacters += "h"
根据脚标替换元素
someCharacters[ 1...3] = ["z","s"]
// 现在someCharacters = ["a","z","s","e","f","g","h"]
- 遍历数组
for-in循环遍历数组 enumerated()方法来遍历数组 enumerated()方法返回数组中每一个元,包含这个元素的索引和值
for (index, value) in someCharacters.enumerated() {
print("Item (index + 1): (value)")
}
二、集合Set
集合Set存储的值必须是可哈希的,所有 Swift 的基础类型(比如 String, Int, Double, 和 Bool)默认都是可哈希的。
Set类型写法:Set<String> (读作:存储字符串的集合)不同于数组、没有简写
初始化
// 初始化器语法创建
var letters = Set<String>()
// 字面量创建集合
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
// 等价于 (和Array不同,Set必须存在,以区分是数组还是集合)
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
- 访问和修改:和Array同
- 遍历集合
Swift 的 Set类型是无序的。要以特定的顺序遍历合集的值,使用 sorted()方法,它把合集的元素作为使用 < 运算符排序了的数组返回。
for genre in favoriteGenres.sorted() {
print("(genre)")
}
- 执行集合操作
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
①使用 intersection(_:)方法来创建一个只包含两个合集共有值的新合集;
oddDigits.intersection(evenDigits).sorted()
// []
②使用 symmetricDifference(_:)方法来创建一个只包含两个合集各自有的非共有值的新合集;
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
③使用 union(_:)方法来创建一个包含两个合集所有值的新合集;
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
④使用 subtracting(_:)方法来创建一个两个合集当中不包含某个合集值的新合集。
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
- 集合比较
①使用“相等”运算符 ( == )来判断两个合集是否包含有相同的值;
②使用 isSubset(of:) 方法来确定一个合集的所有值是被某合集包含;
③使用 isSuperset(of:)方法来确定一个合集是否包含某个合集的所有值;
④使用 isStrictSubset(of:) 或者 isStrictSuperset(of:)方法来确定是个合集是否为某一个合集的子集或者超集,但并不相等;
⑤使用 isDisjoint(with:)方法来判断两个合集是否拥有完全不同的值。
三、字典Dictionary
字典储存无序的互相关联的同一类型的键和同一类型的值的集合。每一个值都与唯一的键相关联,它就好像这个值的身份标记一样,字典的 Key类型必须遵循 Hashable协议,就像集合的值类型。
- 字典类型写法:Dictionary<Key, Value>,简写[Key: Value]
- 初始化
// 初始化器创建
var namesOfIntegers = [Int : String] ()
// 字面量创建
var namesOfIntegers : Dictionary<Int : String> = [1 : "jimmy"]
// 等价于
var namesOfIntegers : [Int : String] = [1 : "jimmy"]
// 推断类型
var namesOfIntegers = [1 : "jimmy"]
- 访问和修改字典
字典的 updateValue(:forKey:)方法,会在键对应的值不存在时设置一个值,存在时更新它。updateValue(:forKey:)方法执行后,返回旧的值的可选类型。 - 遍历字典
for-in循环来遍历字典的键值对
for (code, name) in namesOfIntegers {
print("(code): (name)")
}
Swift 的 Dictionary类型是无序的。要以特定的顺序遍历字典的键或值,使用键或值的 sorted()方法。