004-Swift3.0之集合类型

一、集合

1.数组:Array 有序数据的集

2.集合:Sets 无序无重复数据的集

3.字典:Dictionaries 无序的键值对的集

 

二、数组(Array)

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

1.数组的初始化创建

1)创建空数组

var emptyArray1 = [Int]()
emptyArray1.append(3)
emptyArray1 = []
// 判断数组为空
if emptyArray1.isEmpty {
    print("数组为空")
}

2)创建一个带有默认值的数组

var array = [Double](repeating: 3.09, count: 3)  // [3.09, 3.09, 3.09]

3)两个数组相加创建一个数组

var array1 = [Double](repeating: 2.5, count: 3)
var array2 = [Double](repeating: 2, count: 3)
var array3 = array1 + array2   // [2.5, 2.5, 2.5, 2.0, 2.0, 2.0]

4)用字面量构造数组

var shoppingList: [String] = ["Eggs", "Milk"]

2.访问和修改数组

1)访问

①数组个数

let arr = ["Frank", "Emma", "Tony", "Somon"]
arr.count

②下标访问

let peoples = ["yangyang", "handongjun", "chenxuedong", "linzhiying"]
peoples[0]

2)修改数组

 ①追加

var arr1 = ["Frank", "Emma", "Tony", "Somon"]
arr1.append("Jon")
arr1 += ["Max", "Aa"]

②改变值

var arr2 = ["yangyang", "handongjun", "chenxuedong", "linzhiying", "zhangrui", "lihongyi"]
arr2[0] = "杨洋"
arr2[1..<4] = ["韩东君", "陈学冬", "林志颖"]

③插入

var arr3 = ["yangyang", "handongjun"]
arr3.insert("zhangrui", at: 0)

④删除

var arr4 = ["yangyang", "handongjun", "chenxuedong", "linzhiying", "zhangrui", "lihongyi"]
let range = 0..<2
arr4.remove(at: 0)
arr4.removeLast()
arr4.removeSubrange(range)
arr4.removeAll()

3.数组的遍历

1)遍历元素

var shoppingArray = ["洗衣机", "空调", "电冰箱", "电视机", "电脑", "电饭锅"]
for item in shoppingArray {
    print(item)
}

2)enumerated()遍历元素与下标

for (index, value) in shoppingArray.enumerated() {
    print("index: + \(index) value: + \(value)")
}

 

三、集合(Sets)

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

集合必须显示声明,否则系统会误认为是数组Array类型

1.创建集合

1)创建和构造一个空的集合

var letters = Set<Character>()
letters = []
// 判断是否为空
if letters.isEmpty {
    print("空集合")
}

2)用数组字面量创建集合

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

2.集合基本方法

1)集合元素个数

var set1: Set<String> = ["Rock", "Classical", "Hip hop", "Frank"]
set1.count

2)插入

var s1: Set<String> = ["Frank1", "Frank2", "Frank3", "Frank4"]
s1.insert("Frank5")

3)删除(删除成功返回删除的元素,删除不成功,返回nil)

var s2: Set<String> = ["Frank1", "Frank2", "Frank3", "Frank4"]
if let removedGenre = s2.remove("Frank4") {
    print("删除Frank4成功")
} else {
    print("集合中不存在元素Frank4")
}

4)检测是否包含

var s3: Set<String> = ["Frank1", "Frank2", "Frank3", "Frank4"]
if s3.contains("Frank3") {
    print("集合中包含元素Frank3")
} else {
    print("集合中不包含元素Frank3")
}

3.遍历集合

var s4: Set<String> = ["Frank1", "Frank2", "Frank3", "Frank4"]
for genre in s4 {
    print("\(genre)")
}

Swift的Set类型没有确定的顺序

可以使用sorted()方法按照升序来遍历,返回一个有序数组

var s5: Set<String> = ["Frank1", "Frank2", "Frank3", "Frank4"]
for genre in s5.sorted(){
    print("\(genre)")
}

4.集合操作

var oddDigits: Set = [1, 3, 5]
let evenDigits: Set = [0, 2, 4, 1, 3]
// 集合并集创建一个新的集合
let se1: Set = oddDigits.union(evenDigits)  // [5, 4, 2, 3, 1, 0]
// 集合交集创建一个新的集合
let se2: Set = oddDigits.intersection(evenDigits)  // [3, 1]
// 集合A有集合B没有的元素创建一个新的集合
let se3: Set = oddDigits.subtracting(evenDigits)  // [5]
// 除去两个集合相交以外的元素创建一个新的集合
let se4: Set = oddDigits.symmetricDifference(evenDigits) // [5, 2, 0, 4]

5.集合成员关系

var set01: Set = [1, 2, 3, 4, 5]
var set02: Set = [1, 2]
var set03: Set = [4, 5, 6, 7, 8]
var set04: Set = [5, 4, 3, 2, 1]
// 判断两个集合是否相等(集合无序,所以不用理睬元素顺序)
if set01 == set04 {
    print("set01与set04相等")
}
// 判断是否为子集
if set02.isSubset(of: set01) {
    print("set02是set01的子集")
}
// 判断是否为父集
if set01.isSuperset(of: set02) {
    print("set01是set02的父集")
}
// 判断是否为真子集(A是B的真子集,必有A包含于B,且A!=B)
if set02.isStrictSubset(of: set01) {
    print("set02是set01的真子集")
}
// 判断是否为真父集(A是B的真父集,必有A包含B,且A!=B)
if set01.isStrictSuperset(of: set02) {
    print("set01是set02的真父集")
}
// 判断有个集合是否无交集
if set02 .isDisjoint(with: set03) {
    print("set02与set03无交集")
}

 

四、字典(Dictionary)

字典是一种存储多个相同类型的值的容器

每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符

字典与数组中的数据项不同,字典中的数据项并没有具体顺序

我们在需要通过标识符(键)访问字典中的数据

1.创建字典

1)创建一个空的字典

var namesOfIntegers = [Int: String]()
namesOfIntegers[16] = "sixteen"
namesOfIntegers = [:] // 空字典

2)用字典字面量创建字典

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

2.基本方法

1)获取字典键值对的数量

var dic1: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
dic1.count

2)判断字典是否为空

var dic2: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
if dic2.isEmpty {
    print("字典是否为空")
}

3)添加新的数据项或改变原有的值

var dic3: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
dic3["LHR"] = "London"
dic3["YYZ"] = "Frank"
dic3.updateValue("Frank1", forKey: "FFF")  // 返回对应值的可选型
dic3.updateValue("Frank2", forKey: "DUB")

4)删除键值对

var dic4: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "LHR": "Frank"]
dic4["LHR"] = nil
dic4.removeValue(forKey: "YYZ") // 返回删除值的可选型

3.字典遍历

1)元祖形式遍历key-value

var dic5: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "LHR": "Frank"]
for (key, value) in dic5 {
    print("\(key) - \(value)")
}

2)遍历keys

var dic6: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "LHR": "Frank"]
for key in dic6.keys {
    let value = dic6[key]!
    print("\(key) - \(value)")
}

3)遍历values

var dic7: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "LHR": "Frank"]
for value in dic7.values {
    print(value)
}

 

posted @ 2017-03-21 14:44  Frank9098  阅读(98)  评论(0)    收藏  举报