我正在使用StreamReader从文本文件中读取游戏的高分列表。然后我使用.Sort()
对其进行排序我将它转换为数组并将其传递到游戏中表单上的列表框中。 分数以字符串(分数+“ - ”+用户名)
保存到文本文件中public frmHighScores()
{
InitializeComponent();
List<string> scores = new List<string>();
StreamReader inputFile = File.OpenText("High Scores.txt");
while (!inputFile.EndOfStream)
{
scores.Add(inputFile.ReadLine());
}
scores.Sort();
lstScores.Items.AddRange(scores.ToArray());
}
因为它是一个字符串,所以Sort方法只对得分中的第一个数字进行排序,我不知道如何纠正它。
Here is the image of the sorted list
我希望它如下所示
200
120
105
65
答案 0 :(得分:2)
您可以使用词典来存储这些值(分数和用户名)。这将使您能够使用真实的数字类型进行订购。您可以通过拆分字符串来构建此字典,如下所示:
public void frmHighScores()
{
// Pretend we read this from the file
List<string> fakeFileValues = new List<string>() { "20 steve", "100 john", "25 jane" };
Dictionary<int, string> scores = new Dictionary<int, string>();
foreach (string s in fakeFileValues)
{
// Better ways to do this, just expanding for clarity
string[] split = s.Split(' ');
scores.Add(int.Parse(split[0]), split[1]);
}
// You can then order by a real numeric value
scores.OrderBy(x => x.Key);
}
答案 1 :(得分:1)
您可以使用LINQ OrderByDescending扩展方法并传递“ - ”符号之前的值,如下所示:
scores = scores.OrderByDescending(x=>Convert.ToInt32(x.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]).Trim());