2017-06-04 56 views
0

將一系列數字與一個值相關聯的最佳方式是什麼,以便如果用戶輸入數字,我可以根據數字所屬的範圍查找值?C#範圍到特定評分

例如,我有以下Rating枚舉:

enum Rating 
{ 
    A, B, C, D, E 
} 

並且我想要的範圍內的整數分配給每一個值,使得所述數字1, 2, 3Rating.A相關聯,數字4, 5, 6Rating.B相關聯,數字7, 8, 9Rating.C等關聯...

然後,給定一些用戶輸入,我將返回適當的枚舉值。例如,如果用戶輸入6,我將返回Rating.B,或者如果他們輸入10,我將返回Rating.D

我會有很多範圍(最多100),所以我不想寫一堆if/else if語句來測試所有可能的輸入。應該很容易在集合中添加新的範圍/值。

+0

我覺得很難理解你在問什麼! :-(這對我來說聽起來像「我有問題,請提供解決問題的代碼」。嘗試編輯您的答案,包括您嘗試過的方法;如果您嘗試過任何方法 – Zimano

+1

如果您的確在使用'enum'(例如稱爲'Rating'),然後給出用戶輸入'input',並且範圍數爲'3'(如你的例子中,3個組代表每個評級),那麼類似這樣的事情應該工作: 'return(Rating)((input - 1)/ 3);' –

+0

不知道爲什麼會這樣結束,我已經寫了一個解決方案,現在它不能發佈 – derloopkat

回答

0

使用Dictionary<int, string>其中key是數字,value是評級信。或者,value可能是enum

Dictionary<int, string> ratings = new Dictionary<int, string>(); 
ratings.Add(1, "A"); 
ratings.Add(2, "A"); 
ratings.Add(3, "B"); // etc.. 

// Get a rating by number: 
var test = ratings[1]; // returns "A" 

如果這些值對存在於其他位置,則可以在循環中輕鬆地添加條目。

A Dictionary有一個好處,就是它不允許添加重複的鍵,並且獲得評分基本上是O(1)操作。如果提供的號碼可能不是有效的密鑰,Dictionary還包括檢查密鑰是否存在的方法,例如ContainsKey(TKey)TryGetValue(TKey, TValue)