阵列是有序列的集合,集合内的元素必须是同一种类型的。
var arrayNumber = [1, 2, 5, 10]
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
arrayString[2] = "MoMo"
print(arrayString)
印出结果:
["Kevin", "Yoyo", "MoMo", "Sam"]
append
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
arrayString.append("MoMo")
print(arrayString)
印出结果:
["Kevin", "Yoyo", "Stan", "Sam", "MoMo"]
remove
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
arrayString.remove(at: 1)
print(arrayString)
印出结果:
["Kevin", "Stan", "Sam"]
count
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
print(arrayString.count)
印出结果:
4
1. 使用 forEach
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
arrayString.forEach { item in
print(item)
}
印出结果:
Kevin
Yoyo
Stan
Sam
2. 使用 for-in
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
for item in arrayString {
print(item)
}
印出结果:
Kevin
Yoyo
Stan
Sam
如果想取得该元素在阵列中的 index,可以使用 enumerated()
,它会回传 index 及该元素的序列资料。
我们分别在 forEach 及 for-in 中使用 enumerated():
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
arrayString.enumerated().forEach { index, item in
print("[forEach] \(index): \(item)")
}
for (index, item) in arrayString.enumerated() {
print("[for loop] \(index): \(item)")
}
印出结果:
[forEach] 0: Kevin
[forEach] 1: Yoyo
[forEach] 2: Stan
[forEach] 3: Sam
[for loop] 0: Kevin
[for loop] 1: Yoyo
[for loop] 2: Stan
[for loop] 3: Sam
1. sort()
sort()
,会由小到大排序:var arrayNumber = [1, 2, 5, 10, 3, 9]
arrayNumber.sort()
print(arrayNumber)
印出结果:
[1, 2, 3, 5, 9, 10]
2. 自订排序方式
var arrayNumber = [1, 2, 5, 10, 3, 9]
arrayNumber.sort{ a, b in
a > b
}
print(arrayNumber)
印出结果:
[10, 9, 5, 3, 2, 1]
$0
及$1
分别代表第一个参数及第二个参数,我们用以下写法可以达到同样的效果:var arrayNumber = [1, 2, 5, 10, 3, 9]
arrayNumber.sort{ $0 > $1 }
print(arrayNumber)
印出结果:
[10, 9, 5, 3, 2, 1]
sort(by:)
>
、<
符号排序,例如带入 >
,可以由大到小排序:var arrayNumber = [1, 2, 5, 10, 3, 9]
arrayNumber.sort(by: >)
print(arrayNumber)
印出结果:
[10, 9, 5, 3, 2, 1]
randomElement()
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
print(arrayString.randomElement())
印出结果:
Optional("Yoyo")
由於 randomElement() 回传的资料型态是 Optional,如果想强制取值,可以加上!
。
关於 Optional 会在之後详细介绍。
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
print(arrayString.randomElement()!)
印出结果:
Yoyo
filter
var arrayNumber = [1, 2, 5, 10, 3, 9]
print(arrayNumber.filter{$0 >= 5})
印出结果:
[5, 10, 9]
map
var arrayString: [String] = ["Kevin", "Yoyo", "Stan", "Sam"]
print(arrayString.map{"My name is \($0)"})
印出结果:
["My name is Kevin", "My name is Yoyo", "My name is Stan", "My name is Sam"]
字典的内容是 key-value
的集合,可以透过 key
来取得对应的值。
var dicNumber = ["good": 80, "excellent": 95, "pass": 60]
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
key
来改变对应的值var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
dicString["age"] = "10"
print(dicString)
印出结果:
["name": "Yoyo", "age": "10", "hobby": "hiking"]
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
dicString["gender"] = "female"
print(dicString)
印出结果:
["hobby": "hiking", "age": "18", "name": "Yoyo", "gender": "female"]
removeValue
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
dicString.removeValue(forKey: "age")
print(dicString)
印出结果:
["name": "Yoyo", "hobby": "hiking"]
count
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
print(dicString.count)
印出结果:
3
1. 使用 forEach
可以使用 .key
及 .value
来分别取得 key 及值
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
dicString.forEach { item in
print(item)
print(item.key)
print(item.value)
}
印出结果:
(key: "name", value: "Yoyo")
name
Yoyo
(key: "age", value: "18")
age
18
(key: "hobby", value: "hiking")
hobby
hiking
2. 使用 for-in
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
for item in dicString {
print(item)
print(item.key)
print(item.value)
}
印出结果:
(key: "name", value: "Yoyo")
name
Yoyo
(key: "age", value: "18")
age
18
(key: "hobby", value: "hiking")
hobby
hiking
randomElement()
var dicString: [String : String] = ["name": "Yoyo", "age": "18", "hobby": "hiking"]
print(dicString.randomElement())
print(dicString.randomElement()!)
印出结果:
Optional((key: "age", value: "18"))
(key: "age", value: "18")
filter
var dicNumber = ["good": 80, "excellent": 95, "pass": 60]
print(dicNumber.filter{$0.value >= 80})
印出结果:
["excellent": 95, "good": 80]
mapValues
var dicNumber = ["good": 80, "excellent": 95, "pass": 60]
print(dicNumber.mapValues{$0 + 5})
印出结果:
["good": 85, "excellent": 100, "pass": 65]
Set 是没有序列的集合,包含的值都是不重复的
var setNumber: Set = [0, 2, 5, 3]
var setString: Set<String> = ["orange", "yellow", "black"]
insert
var setString: Set<String> = ["orange", "yellow", "black"]
setString.insert("white")
print(setString)
印出结果:
["white", "orange", "yellow", "black"]
remove
var setString: Set<String> = ["orange", "yellow", "black"]
setString.remove("orange")
print(setString)
印出结果:
["yellow", "black"]
count
var setString: Set<String> = ["orange", "yellow", "black"]
print(setString.count)
印出结果:
3
1. 使用 forEach
var setString: Set<String> = ["orange", "yellow", "black"]
setString.forEach { item in
print(item)
}
印出结果:
orange
yellow
black
2. 使用 for-in
var setString: Set<String> = ["orange", "yellow", "black"]
for item in setString {
print(item)
}
印出结果:
orange
yellow
black
randomElement()
var setString: Set<String> = ["orange", "yellow", "black"]
print(setString.randomElement())
print(setString.randomElement()!)
印出结果:
Optional("black")
black
filter
var setNumber: Set = [0, 2, 5, 3]
print(setNumber.filter{$0 > 2})
印出结果:
[3, 5]
map
var setNumber: Set = [0, 2, 5, 3]
print(setNumber.map{$0 * 10})
印出结果:
[0, 20, 50, 30]
contains
var setString: Set<String> = ["orange", "yellow", "black"]
print(setString.contains("yellow"))
print(setString.contains("red"))
印出结果:
true
false
intersection
var setString: Set<String> = ["orange", "yellow", "black"]
var setString2: Set<String> = ["red", "yellow", "white"]
print(setString.intersection(setString2))
印出结果:
["yellow"]
symmetricDifference
var setString: Set<String> = ["orange", "yellow", "black"]
var setString2: Set<String> = ["red", "yellow", "white"]
print(setString.symmetricDifference(setString2))
印出结果:
["red", "black", "orange", "white"]
union
var setString: Set<String> = ["orange", "yellow", "black"]
var setString2: Set<String> = ["red", "yellow", "white"]
print(setString.union(setString2))
印出结果:
["black", "orange", "yellow", "red", "white"]
subtracting
var setString: Set<String> = ["orange", "yellow", "black"]
var setString2: Set<String> = ["red", "yellow", "white"]
print(setString.subtracting(setString2))
print(setString2.subtracting(setString))
印出结果:
["black", "orange"]
["red", "white"]
今日小结:
今天认识了不同种类的集合类型,我们可以善用他们不同的特性,选择适合的类型来使用。
如果需要处理的是有排序的资料,较适合使用阵列 (Array)。
如果要处理的资料不在乎排序,需要 key-value 配对资料,较适合使用字典 (Dictionary)。
若是要处理数学集合运算,则集合 (Set) 是个不错的选择。
参考来源:
Array
Dictionary
Set
前言 各位早安,书接上回我们安装好python跟Visual Studio Code,完成了开发环境...
如同前面所说,资料模型需要运用到实际环境中才会发挥价值 Initiation 延续之前模型的初始条件...
delete delete(String table, String whereClause, St...
第六篇我们要对之前提过的 AR model (AutoRegressive model) 做一个延伸...
前言 大家好,我是 Leo,这是我第一次参加 IT 铁人,心里满是期待。过去只有在 Medium (...