2017-03-08 127 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) 
相關問題