gpt4 book ai didi

C# Windows 窗体 : Using List to create a Top 10 Leaderboard

转载 作者:行者123 更新时间:2023-11-30 23:07:22 24 4
gpt4 key购买 nike

我正在尝试根据从文本文件中读取的玩家用户名和分数,在 C# Windows 窗体中创建前 10 名排行榜。

例如文本文件中的行数:

丹娜~21

到目前为止,这是我的代码:

private void scrnLeaderboard_Load(object sender, EventArgs e)
{
string[] players = FileMethods.ReadLines();

// Create List<KeyValuePair> to hold all player usernames and scores
List<KeyValuePair<int, string>> playerNamesScores = new List<KeyValuePair<int, string>>();

foreach (var item in players)
{
string[] playerDetails = item.Split('~');

if (playerDetails.Length == 2)
// Player's username and score added to List<KeyValuePair> playersNamesScores
// Key is score, Value is username
playerNamesScores.Add(new KeyValuePair<int, string>(Convert.ToInt32(playerDetails[1]), playerDetails[0].ToString()));
}

// Sorting the scores in descending order
var sortedScores = playerNamesScores.OrderByDescending(x => x).ToList<KeyValuePair<int, string>>();

// Assigning the appropriate values to each label's text on the leaderboard
lblPos1.Text = String.Format("{0}: \t{1}", sortedScores[0].Value, sortedScores[0].Key);
lblPos2.Text = String.Format("{0}: \t{1}", sortedScores[1].Value, sortedScores[1].Key);
lblPos3.Text = String.Format("{0}: \t{1}", sortedScores[2].Value, sortedScores[2].Key);
lblPos4.Text = String.Format("{0}: \t{1}", sortedScores[3].Value, sortedScores[3].Key);
lblPos5.Text = String.Format("{0}: \t{1}", sortedScores[4].Value, sortedScores[4].Key);
lblPos6.Text = String.Format("{0}: \t{1}", sortedScores[5].Value, sortedScores[5].Key);
lblPos7.Text = String.Format("{0}: \t{1}", sortedScores[6].Value, sortedScores[6].Key);
lblPos8.Text = String.Format("{0}: \t{1}", sortedScores[7].Value, sortedScores[7].Key);
lblPos9.Text = String.Format("{0}: \t{1}", sortedScores[8].Value, sortedScores[8].Key);
lblPos10.Text = String.Format("{0}: \t{1}", sortedScores[9].Value, sortedScores[9].Key);
}

FileMethods.ReadLines() 就是这样的:

string filepath = @"previousPlayers.txt";
string[] players = File.ReadLines(filepath).ToArray();
return players;

每次我编译代码时,我都会得到这个错误,'至少一个对象必须实现 IComparable。',在这条线上:

var sortedScores = playerNamesScores.OrderByDescending(x => x).ToList<KeyValuePair<int, string>>();

我不确定这意味着什么,或者我的代码如何工作。

非常感谢任何帮助!

最佳答案

OrderByDescending方法按键对项目进行排序,由键选择器(此方法的第一个参数)返回。然后,它使用单个项目的这些键将一个项目与另一个项目进行比较,以决定哪些项目先出现,哪些出现在后。默认情况下,它使用 IComparable 的方法用于此比较的项目实现的接口(interface)。但是你指定了 x => x作为键选择器,它返回 KeyValuePair<int, string> 类型的对象,它没有实现 IComparable .因此无法对它们进行排序,您会收到“至少一个对象必须实现 IComparable”错误。

因为您只想按分数(类型 int )和 int 来订购商品工具 IComparable ,您可以简单地使用返回分数的选择器:

var sortedScores = playerNamesScores.OrderByDescending(x => x.Key).ToList<KeyValuePair<int, string>>();

如果需要更复杂的项目排序方式(例如,您需要将分数相同的游戏按字母顺序排序),您可以声明实现 IComparer<KeyValuePair<int, string>> 的类接口(interface)并将其实例作为 OrderByDescending 的第二个参数传递方法。

关于C# Windows 窗体 : Using List<KeyValuePair> to create a Top 10 Leaderboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47371037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com