- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据从文本文件中读取的玩家用户名和分数,在 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/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!