ranking list
👉 replit
// name and score
let dict = [ // Dictionary<Key, Value>
"Sam": 79, "Joe": 5, "Mary": 79, // Key = String
"Tom": 5, "Alex": 82, "Nancy": 1 // Value = Int
]
// ⭐️ 1. sort it by value first
let sorted = dict.sorted { $0.value > $1.value }
var prev: Int? // previous score
var currentRank = 0
var rankingList = [(name: String, score: Int, rank: Int)]()
// ⭐️ 2. give every element a rank
for (i, elem) in sorted.enumerated() {
// if elem.value is not the same as previous score,
// update previous score and current rank
if prev == nil || elem.value != prev! {
prev = elem.value
currentRank = i + 1 // i is zero-based, rank is one-based
}
rankingList.append((elem.key, elem.value, currentRank))
}
print(rankingList)
/*
[
(name: "Alex" , score: 82, rank: 1),
(name: "Sam" , score: 79, rank: 2),
(name: "Mary" , score: 79, rank: 2), // no 3rd place
(name: "Joe" , score: 5, rank: 4),
(name: "Tom" , score: 5, rank: 4), // no 5th place
(name: "Nancy", score: 1, rank: 6)
]
*/
Last updated
Was this helpful?