如何检查值是否高于字典元素

时间:2017-05-05 13:42:59

标签: c# dictionary

我目前正在开展网络游戏。游戏结束后,玩家姓名和分数将被发送到服务器进行存储。玩家可以从主菜单访问这些高分。

一旦服务器上存储了5个分数,只有超过当前存储分数的分数才会添加到数据库中。

Highscores存储在字典(string,int)中,然后按值排序。

我正在努力创建一个方法,该方法将获得一个高分项(名称,分数),并根据highscores词典进行检查。如果得分足够高,字典将被重新排序并包含新值。

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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);
    }