2021 iThome 鐵人賽
Mobile Development
DAY 11

Dictionary 使用array創建與字典取值

轉職App開發打怪雜記 系列 第 11 篇
蕾夢
4 年前 ‧ 1187 瀏覽

緣由:

在職訓時老師講解語法,講到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)")
此系列
上一篇
此系列
下一篇

1 則留言

Marvin
.4 年前

可以用 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]()
0 則回應 分享
登入發表回應