2017-03-08 177 views
-8
let smallestgrade = (min(musicgrade, bildgrade, matematicsgrade)) (Dosent work) 

等级的替代方案是: “A,B,C,d,E,F”如何获取字符串的最小值和最大值?

F是最小的值,并且具有0

A的值是最大的值,并且具有值为20

如何挑选出最小的值? 我可以做这样的事情:

A = 20

B = 17.5

C = 15.0

d = 12.5

E = 10

F = 0

??

+0

这看起来像某种功课/转让的,如果这是你应该做的一些情况更多的研究。这是一个相当容易实现的事情。你已经试过了什么? – Scriptable

+0

它如何“不起作用”?什么是投入和预期产出? - 你*可以*调用min()和max()的字符串列表... –

+0

不是一个家庭作业,只是我编码 – theswed

回答

1

也许你想这样的事情:

let gradeValues = ["A" : 20, "B" : 17.5, "C" : 15.0, "D" : 12.5, "E" : 10, "F" : 0] 
let grades = ["B", "A", "C", "A", "B"] 
let minim = grades.min {gradeValues[$0]! < gradeValues[$1]!} // "C" 
+1

'let minim = grades.max()'恰好产生相同的结果:) –

+1

@MartinR当然,但关键词是“碰巧”。如果我们引入“A +”和“C-”选项会怎样?如果,如果...怎么办?我可以继续。事实是,问题是关于基于字母的_symbols_和它们的数字_meanings_之间的对应关系的需要,并且该对应关系就是我的解决方案所展现的。 – matt

+0

你当然是对的 - 我的评论只适用于问题中提到的特殊情况。 –

2

简单,类型安全的解决方案:

enum Grade : Double { 
    case A = 20.0 
    case B = 17.5 
    case C = 15.0 
    case D = 12.5 
    case E = 10.0 
    case F = 0.0 
} 

extension Grade : Comparable { 
    static func <(lhs: Grade, rhs: Grade) -> Bool { 
     return lhs.rawValue < rhs.rawValue 
    } 
} 

let musicGrade = Grade.A 
let bildGrade = Grade.E 
let mathGrade = Grade.D 

let worstGrade = [musicGrade, bildGrade, mathGrade].min() 
print(worstGrade) 
相关问题