2017-06-17 53 views
0

排序后的数组,我想用的名字斯威夫特 - 显示与按键

一起显示的三个最高等级

我的代码:

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) 

我得到以下输出:

[ “A”,“A”,“B”]

我想得到的是类似于[“Baris Yan”:“A”,“Sam Chakra”:“A”,“Elias Brown”:“B “]

由于我似乎无法直接对字典进行排序,我无法确定如何显示名称。

+1

如果你将'var Student:'var name:String','var Student:Int'成员,计算属性'var letterRepresentation:String {...}'和**数组**实例。顺便说一句:根据定义,字典是无序的。 – vadian

+0

斯威夫特2或3?你的代码在Swift 3中给出了错误0 –

回答

2

我的两分钱(按评论)

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"] 

有没有信E

+0

愚蠢的错字:你的'switch'会让'A'成为'69'和'79'。 –

+0

糟糕。非常感谢@PauloMattos – vadian

1

下面的代码片段会给你你需要确切的结果:

让gradesofStudent = [ “埃利亚斯·布朗”:80, “巴里斯严”:99, “基督教Najm”:70, “萨姆脉轮”:90, “阿兰埃利奥特”:55, “乔治奥巴马”:77, ]

VAR Y = “”

变种名称= “”

FUNC mainFunction(stDictionary:词典) - > ArraySlice < [字符串:字符串]> {

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) 

}

令V = mainFunction(stDictionary:gradesofStudent) 打印(ⅴ)