//一. 数组(Array)
//同 OC 一样, array 是有序的, 其它两个无序
//可变 var, 不可变 let
//Array(Dictionarie, Sett)类型写法: Array<存储数据类型> 或者 [存储数据类型] 一般使用第二种
//1. 数组初始化方法,创建一个空数组
var someInts = Array<Int>()
// var someInts = []()
print("someInts is of type [Int] with \(someInts.count) items")
//如果(通过函数参数或者已知类型的值),已知元素类型,可以用 [] 语句创建一个空数组
someInts.append(3) //添加一个新元素
someInts = []
//2. 创建有 n 个相同元素的数组
var threeDoubles = Array(repeatElement(0.0, count: 3))
print(threeDoubles)
//3. 合并数组, 两个数组中元素类型必须一样
var anotherThreeDoubles = Array(repeatElement(1.0, count: 3))
var sixDoubles = threeDoubles + anotherThreeDoubles
//4. 用数组语法创建一个数组
var shoppingList: [String] = ["Eggs", "Milk", "Bread"]
//可简写为 var shoppingList = ["Eggs", "Milk", "Bread"]
//获取元素个数 count
print("The shopping list contains \(shoppingList.count) items.")
//5. 判断数组是否为空 isEmpty
if shoppingList.isEmpty {
print("The shopping list is empty.")
}else {
print("The shopping list is not empty.")
}
//6. 数组中添加元素 append(_:)
shoppingList.append("Flour")
//7. 添加一个数组也可以用 +=
shoppingList += [" Baking Powder"]
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
//8. 获取数组中的元素
var firstItem = shoppingList[0]
//9. 修改数组中的元素
shoppingList[0] = "Six eggs"
//用 range 修改多个值, 修改的个数和赋值的个数可以不一样
shoppingList[4...6] = ["chicken", "pork"] //"Six eggs", "Milk", "Bread", "Flour", " Baking Powder", "Chocolate Spread", "Cheese", "Butter"] 中下标为 4, 5, 6 的三个元素被 替换为两个元素
// print(shoppingList)
//10. 往数组中插入元素
shoppingList.insert("Maple Syrup", at: 0)
//11. 移除数组中的元素, 并将移除的元素返回, 移除后第一个元素变为 Six eggs
let mapleSyrup = shoppingList.remove(at: 0)
//移除最后一个元素, 同样将移除的元素返回
let pork = shoppingList.removeLast()
//12. 遍历数组
for item in shoppingList {
print(item)
}
//用 enumerated() 方法遍历,返回值为元组,元组包括元素下标和元素值
for (index, value) in shoppingList.enumerated() {
print("Item \(index): \(value)")
}
// Item 0: Six eggs
// Item 1: Milk
// Item 2: Bread
// Item 3: Flour
// Item 4: chicken
// Item 5: pork
//二. 集合(Set)
//1. 创建集合
//(1) Swift 中的集合类型写法为 Set<类型>
var letters = Set<Character>()
print("letters is of type Set<Character> with \(letters.count) items.")
letters.insert("a")
//如果已知为集合类型,可以用创建空数组的语法创建一个空集合, letters 此时为空集合,但是仍然是 Set<Character> 类型的
letters = []
//(2) 用数组初始化一个集合
//set 类型不能从一个数组语句单独推出, 所以类型 Set 必须声明. 又,因为 Swift 的类型推断,如果用数组语法初始化 Set 而且集合中元素的类型相同,可以不必写元素的类型
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
var fav: Set = ["apple", "huawei"]
//2. Set 也有 count 和 isEmpty 属性
//3. Set 插入值
favoriteGenres.insert("Jazz")
//4. Set 删除值,
//如果集合中包含该值移除该值并返回, 否则返回 nil
if let removedGenre = favoriteGenres.remove("Rock") {
print("\(removedGenre)? I'm over it")
} else {
print("I never much cared for that.")
}
//5. 检查 Set 是否有某个值,用 contains 属性
if favoriteGenres.contains("Funk") {
print("I get up on the good foot.")
} else {
print("It's too funky in here.")
}
//6. 遍历 Set
for genre in favoriteGenres {
print(genre)
}
// Jazz
// Hip hop
// Classical
//集合中的元素是无序的,用 sorted() 可以按 < 顺序输出
for genre in favoriteGenres.sorted() {
print("\(genre)")
}
// Classical
// Hip hop
// Jazz
//7. 集合的运算
//(1) 交集(union), 并集(intersection), symmetricDifference(a 并 b 减 a 交 b), subtracting (a 减 a 交 b)
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]
//(2) 子集isSubset, 父集isSuperset, 完全子集isStrictSubset, 完全父集isStrictSuperset, 不想交isDisjoint, 相等 ==
//返回 Bool 值
let houseAnimals: Set = ["