[英]Swift - display a sorted array with keys
I am want to display the three highest grades along with the names 我想显示三个最高成绩以及姓名
My code: 我的代码:
let gradesofStudent = [
"Elias Brown": 80,
"Baris Yan": 99,
"Christian Najm": 70,
"Sam Chakra": 90,
"Alain Elliot": 55,
"Georges Obama": 77,
]
var y = " "
var name = " "
func mainFunction(stDictionary: Dictionary<String, Int>) -> ArraySlice<String>{
var emptyDic: [String: String] = [:]
for (keys, value) in gradesofStudent {
if value > 0 && value <= 59 {y = "F"}
else if value >= 60 && value <= 69 {y = "D"}
else if value >= 70 && value <= 79 {y = "C"}
else if value >= 80 && value <= 89 {y = "B"}
else {y = "A"}
emptyDic[keys] = y
}
var arrayGrades = (Array(emptyDic).sorted{$0.1 < $1.1}).map{(k,v) in return(k:v)}
var firstThree = arrayGrades[0..<3]
return(k: firstThree)
}
let v = mainFunction(stDictionary:gradesofStudent)
print (v)
I am getting the following output: 我得到以下输出:
["A", "A", "B"] [“ A”,“ A”,“ B”]
What I want to get is something like [ "Baris Yan":"A", "Sam Chakra":"A", "Elias Brown":"B"] 我想得到的是类似[[Baris Yan]:“ A”,“ Sam Chakra”:“ A”,“ Elias Brown”:“ B”]
Since i can't seem to sort the dictionary directly, I can't figure how to display the names. 由于我似乎无法直接对字典进行排序,因此我不知道如何显示名称。
My two cents (according to the comment) 我的两分钱(根据评论)
struct Student {
let name : String
let grade : Int
var letterRepresentation : String {
switch grade {
case 0..<60 : return "F"
case 60..<70 : return "D"
case 70..<80 : return "C"
case 80..<90 : return "B"
default : return "A"
}
}
}
let gradesofStudent = [Student(name: "Elias Brown", grade: 80),
Student(name: "Baris Yan", grade: 99),
Student(name: "Christian Najm", grade: 70),
Student(name: "Sam Chakra", grade: 90),
Student(name: "Alain Elliot", grade: 55),
Student(name: "Georges Obama", grade: 77)]
let threeHighestGrades = gradesofStudent.sorted(by: {$0.grade > $1.grade}).prefix(3)
print(threeHighestGrades.map({"\($0.name) - \($0.letterRepresentation)"}))
// ["Baris Yan - A", "Sam Chakra - A", "Elias Brown - B"]
Is there no letter E
? 没有字母
E
吗?
The below code snippet would give you the exact result you need: 以下代码段将为您提供所需的确切结果:
let gradesofStudent = [ "Elias Brown": 80, "Baris Yan": 99, "Christian Najm": 70, "Sam Chakra": 90, "Alain Elliot": 55, "Georges Obama": 77, ] let gradesofStudent = [“伊利亚斯·布朗(Elias Brown):80,”巴里斯·严(Baris Yan)“:99,”克里斯蒂安·纳伊姆(Christian Najm)“:70,”萨姆·查克拉(Sam Chakra)“:90,”阿兰·艾略特(Alain Elliot)“:55,”乔治·奥巴马(Georges Obama)“:77,]
var y = " " var y =“”
var name = " " var name =“”
func mainFunction(stDictionary: Dictionary)->ArraySlice<[String : String]> { func mainFunction(stDictionary:Dictionary)-> ArraySlice <[String:String]> {
var emptyDic: [String: String] = [:]
for (keys, value) in gradesofStudent {
if value > 0 && value <= 59 {y = "F"}
else if value >= 60 && value <= 69 {y = "D"}
else if value >= 70 && value <= 79 {y = "C"}
else if value >= 80 && value <= 89 {y = "B"}
else {y = "A"}
emptyDic[keys] = y
}
var arrayGrades = emptyDic.sorted{$0.1 < $1.1}.map{(k,v) in return[k:v]}
var firstThree = arrayGrades[0..<3]
return(firstThree)
} }
let v = mainFunction(stDictionary:gradesofStudent) print (v) 令v = mainFunction(stDictionary:gradesofStudent)打印(v)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.