在職訓時老師講解語法,講到Dictionary(字典)時,有一種老師說的我都懂,看起來沒什麼問題,但好像又不是真的懂
其實作為現職的app工程師到現在也還是會遇到腦筋打結的時候,資料類型沒啥問題但常常問題在於到底有幾層中括號,每次遇到這個我都要想超久,沒什麼特別有效率的方法就不寫下來了,假如有大神有很棒的方法請教教我,本篇單就取出字典內的值與字典的相關使用來介紹。
這次遇到的問題是需要將兩筆不一樣的陣列資料拼在一起後,然後再比對顯示資料,腦內風暴了一下後,查找了字典的各種用法,剛好有合用的,所以記錄下來
以下就用我舉的範例來說明這次要紀錄的方法,numberItems陣列為學生號碼陣列,scores陣列為學生成績陣列,要從這兩個陣列中得出平均和不及格的學生座號與成績
創建座號陣列
let numberItems = Array(1..<6).map{ "座號\($0)"}
學生成績陣列
let scores = [84,73,55,87,96]
用陣列創建[座號,成績]字典:
let scoreDic = Dictionary(uniqueKeysWithValues: zip(numberItems, scores))
創建平均變數
var average = 0.0
遍歷[座號,成績]字典
for (number,score) in scoreDic {
if score <= 60 {
print("\(number)成績不及格,這次成績為\(score)")
}
else {
if score >= 90 {
print("\(number)非常優秀,這次成績為\(score)")
}
else {
print("\(number)成績及格,這次成績為\(score)")
}
}
average = average + Double(score)
}
average = average/Double(scoreDic.count)
print("平均等於 :\(average)")
可以用 typealias 讓 dict 有他的意義
// 先定義學生的 id vs. score 是一個 key value 型態
typealias StudentIDAndScoreDict = [Int: Int]
// 把這個 id vs. score 裝進 Array 裡面,就會看起來像這樣
var studentScoreList = [StudentIDAndScoreDict]()
另一種,就是設計學生的資料結構
// 設計學生的資料結構,如果他應該有 let name: String,那就加進去
struct Student {
let id: Int
let score: Int
}
// 那裝學生的 array ,就會這樣
var studentListV2 = [Student]()