The Swift Programming Language学习笔记(五)——集合类型
集合类型Swift语言提供 Swift语言中的 Swift的 集合的可变性如果创建一个 数组数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。Swift的 数组的简单语法写Swift数组应该遵循像Array这样的形式,其中Element是这个数组中唯一允许存在的数据类型。我们也可以使用像[Element]这样的简单语法。尽管两种形式在功能上是一样的,但是推荐较短的那种。 创建一个空数组使用构造语法来创建一个由特定数据类型构成的空数组。如果代码上下文中已经提供了类型信息,例如一个函数参数或者一个已经定义好类型的常量或者变量,我们可以使用空数组语句创建一个空数组,它的写法很简单: var a = [Int]()
print(a) // []
print(a.count) // 0
a = []
创建一个带有默认值的数组Swift中的 var a = [Double](count: 3,repeatedValue: 1.25)
print(a) // [1.25,1.25,1.25]
通过两个数组相加创建一个数组可以使用加法操作符( var a = [Int](count: 3,repeatedValue: 1)
var b = [Int](count: 4,repeatedValue: 2)
var c = a + b
print(c) // [1,1,2,2]
用字面量构造数组使用字面量来进行数组构造,这是一种用一个或者多个数值构造数组的简单方法。字面量是一系列由逗号分割并由方括号包含的数值。 var a: [Int] = [1,2,3] // 数组被声明为变量(var关键字创建)而不是常量(let创建)是因为以后可能会有更多的数据项被插入其中
由于Swift的类型推断机制,当我们用字面量构造只拥有相同类型值数组的时候,我们不必把数组的类型定义清楚。 var a = [1,3]
访问和修改数组
如果我们试着对索引越界的数据进行检索或者设置新值的操作,会引发一个运行期错误。 var a = ["abc","def","ghi","jklmn","opqrst","uvwxyz"]
print(a.count)
if a.isEmpty {
print("a is empty.")
} else {
print("a isn't empty.")
}
a.append("!@#$%^")
print(a)
a += ["Hello!"]
a += ["你好!","~~~~"]
print(a)
var b = a[2]
a[3] += "==="
print(a)
print(b)
a[1...2] = ["***","^^^","000"]
print(a)
a.insert("new",atIndex: 0)
print(a)
let c = a.removeAtIndex(1)
print(c)
print(a)
// print(a[11]) // 运行时错误:fatal error: Array index out of range
let d = a.removeLast()
print(d)
print(a)
数组的遍历
let a = ["aaa","bbb","ccc","ddd"]
for i in a {
print(i)
}
for (i,data) in a.enumerate() {
print("(i) => (data)") }
集合集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。Swift的Set类型被桥接到Foundation中的NSSet类。 集合类型的哈希值一个类型为了存储在集合中,该类型必须是可哈希化的。也就是说,该类型必须提供一个方法来计算它的哈希值。一个哈希值是 Swift的所有基本类型(比如 你可以使用你自定义的类型作为集合的值的类型或者是字典的键的类型,但你需要使你的自定义类型符合Swift标准库中的 因为
print(0.hashValue) // 0
print(1.hashValue) // 1
print(1.2.hashValue) // 4608083138725491507
print("1".hashValue) // 4799450059485597623
var a = "123"
var b = "123"
print(a.hashValue) // 4799450059702945344
print(b.hashValue) // 4799450059702945344
集合类型语法Swift中的 创建和构造一个空的集合通过构造器语法创建一个特定类型的空集合。此外,如果上下文提供了类型信息,比如作为函数的参数或者已知类型的变量或常量,我们可以通过一个空的数组字面量创建一个空的 var a = Set<Character>()
print(a) // []
a.insert("a")
print(a) // ["a"]
a = []
print(a) // []
用数组字面量创建集合可以使用数组字面量来构造集合,并且可以使用简化形式写一个或者多个值作为集合元素。一个 var a: Set<String> = ["a","b","ccc"]
print(a) // ["b","a","ccc"]
var b: Set = [1,3]
print(b) // [2,3,1]
访问和修改一个集合
var a: Set = [1,5]
print(a)
print(a.count)
if a.isEmpty {
print("a is empty.")
} else {
print("a isn't empty.")
}
a.insert(4)
print(a)
print(a.remove(1)) // 返回可选类型:Optional(1)
print(a.remove(100)) // nil
print(a.remove(50) ?? "未找到!") // 未找到!
if a.contains(2) {
print("a contains 2.")
} else {
print("a doesn't contain 2.")
}
a.removeAll()
print(a) // []
遍历一个集合使用 let a: Set = [4,5,1,3]
for i in a {
print(i,terminator: "、") // 5、2、4、1、3、
}
print("")
for i in a.sort() {
print(i,terminator: "、") // 1、2、3、4、5、
}
集合操作你可以高效地完成 基本集合操作
let a: Set = [1,7,9]
let b: Set = [0,4,6,8]
let c: Set = [2,7]
print(a.union(b).sort()) // [0,3,4,5,6,7,8,9]
print(a.intersect(b).sort()) // []
print(a.subtract(c).sort()) // [1,9]
print(a.exclusiveOr(c).sort()) // [1,9]
集合成员关系和相等
let a: Set = [1,3]
let b: Set = [1,3]
print(a == b) // true
let c: Set = [1]
print(a.isSupersetOf(c)) // true
print(c.isSubsetOf(a)) // true
print(a.isStrictSupersetOf(c)) // true
print(c.isStrictSubsetOf(a)) // true
let d: Set = [4,6]
print(a.isDisjointWith(d)) // true
字典字典是一种存储多个相同类型的值的容器。每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符。和数组中的数据项不同,字典中的数据项并没有具体顺序。我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样。 Swift的 字典类型快捷语法Swift的字典使用 创建一个空字典使用构造语法创建一个拥有确定类型的空字典。如果上下文已经提供了类型信息,我们可以使用空字典字面量来创建一个空字典,记作 var a = [Int: String]()
print(a) // [:]
a = [:]
用字典字面值创建字典可以使用字典字面量来构造字典,字典字面量是一种将一个或多个键值对写作 var a: [Int: String] = [1: "Hello",2: "World",3: "!"]
print(a) // [2: "World",3: "!",1: "Hello"]
a = [4: "???",5: "@@@"]
print(a) // [5: "@@@",4: "???"]
访问和修改字典
var a = [1: "Hello",2: "world",3: "!!!"]
print(a.count) // 3
if a.isEmpty {
print("a is empty.")
} else {
print("a isn't empty.")
}
a[4] = "???"
print(a)
a[1] = "Hello-new"
print(a)
print(a.updateValue("WWWWWWW",forKey: 2)) // 返回可选类型:Optional("world")
print(a.updateValue("Dog",forKey: 8)) // 返回nil
print(a[1]) // 返回可选类型:Optional("Hello-new")
print(a[100] ?? "未找到!") // 未找到!
a[1] = nil
print(a)
print(a.removeValueForKey(2)) // 返回可选类型:Optional("WWWWWWW")
print(a.removeValueForKey(1000)) // nil
print(a)
字典遍历
var a = [1: "Hello",3: "!!!"]
for (key,value) in a {
print("(key) => (value)") } for i in a.keys.sort(){ print(i) } for i in a.values.sort() { print(i) } let b = [Int](a.keys) print(b) let c = [String](a.values) print(c)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |