2017-05-05 106 views
1

我目前正在研究pong的網絡遊戲。一旦遊戲結束,玩家名字和得分將被髮送到服務器進行存儲。玩家可以從主菜單訪問這些高分。如何檢查一個值是否高於字典元素

一旦存儲在服務器上的5個分數,只有擊敗當前存儲分數的分數被添加到數據庫中。

高分存儲在字典(字符串,int)中,然後按值排序。

我很努力地創造一種方法,它將採取高分條目(名稱,分數),並根據高分榜字典進行檢查。如果分數足夠高,字典將被重新排序幷包含新值。

+2

你到現在爲止嘗試過什麼?你可以發佈一些我們可以看一看的代碼嗎? –

+0

如果您在使用列表而不是字典的情況下如何檢查值。它應該沒有太大的不同。 –

+0

可能的重複[如何按值排序字典?](http://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value) –

回答

1

我會創建一個字典變量,並簡單地添加分數,因爲我去。然後,當我需要獲得高分時,返回一個有序的KeyValuePair類型枚舉。

public class HighScore 
{ 
    static Dictionary<string, int> scoreBook = new Dictionary<string, int>() 
    { 
     { "Sam", 300 }, 
     { "Frodo", 200 }, 
     { "Bilbo", 100 }, 
    }; 
    public static void Main(string[] args) 
    { 
     AddScore("Gandolf", 250); 

     foreach (var entry in GetTopScores()) 
     { 
      Console.WriteLine("{0}: {1}", entry.Key, entry.Value); 
     } 
    } 

    public static void AddScore(string name, int score) 
    { 
     scoreBook.Add(name, score); 
    } 

    public static IOrderedEnumerable<KeyValuePair<string, int>> GetTopScores() 
    { 
     var sortedScoreBook = from entry in scoreBook orderby entry.Value descending select entry; 
     return sortedScoreBook; 
    } 
} 
0

就我個人而言,我不會在這裏使用Dictionary<TKey,TValue>,我認爲使用比較器對值進行操作的KeyValuePairs的SortedList可能會更好。但是,如果你堅持,在這裏你去:

private int numberOfHighScoresToKeepTrackOf = 5; 
    private Dictionary<string,int> _scoresDictionary = new Dictionary<string, int>(); 

    public void AddScore(KeyValuePair<string, int> newScore) 
    { 
     if (_scoresDictionary.Count < numberOfHighScoresToKeepTrackOf) 
      _scoresDictionary.Add(newScore.Key, newScore.Value); 
     else if (_scoresDictionary.Values.Min() < newScore.Value) 
       _scoresDictionary.Add(newScore.Key, newScore.Value); 

     var top = _scoresDictionary.OrderByDescending(pair => pair.Value).Take(Math.Min(_scoresDictionary.Count, numberOfHighScoresToKeepTrackOf)); 
     _scoresDictionary = top.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
    } 
相關問題