我是一个正在创建读写文本文件的评分系统。我的当前格式是读取文件的每一行,并将每一行存储到一个List<string>
中。一个典型的行可能是这样的:50:詹姆斯(50是分数,詹姆斯是用户名)
。
我需要按得分排序列表,同时保留名称与字符串。以下是我所说的一个例子:
无序文本文件:
50:James
23:Jessica
70:Ricky
70:Dodger
50:Eric
请注意,有一些分数是相同的,这会妨碍我使用数字键创建列表。
有序列表:
70:Dodger
70:Ricky
50:Eric
50:James
23:Jessica
我的当前代码(不能处理两个或更多相同的分数)
Dictionary<int, string> scoreLines = new Dictionary<int, string>();
if (!File.Exists(scorePath))
{
File.WriteAllText(scorePath, "No Scores", System.Text.Encoding.ASCII);
}
StreamReader streamReader = new StreamReader(resourcePath + "\\scoreboard.txt");
int failedLines = 0;
while (failedLines < 3)
{
string line = streamReader.ReadLine();
if (String.IsNullOrEmpty(line))
{
failedLines++;
continue;
}
scoreLines.Add(int.Parse(line.Split(':')[0]), line.Split(':')[1]);
}
var arr = scoreLines.Keys.ToArray();
arr = (from a in arr orderby a descending select a).ToArray();
List<string> sortedScoreLines = new List<string>();
foreach (int keyNum in arr)
{
sortedScoreLines.Add(keyNum + ":" + scoreLines[keyNum]);
}
return sortedScoreLines;
是的,我知道这个方法非常低效和丑陋,但我花费了很长时间尝试许多不同的方法。