我正在为一个类似于 Subway Surfers 的大学项目编写游戏。我的一切都工作正常,但我的问题出在我编码的书签选项上。
当您在游戏中失败时,您必须输入一个名称,该名称会以 <int score> <string name>
格式写入并保存在文本文件中。 ,例如:
11245 Lucas
10123 Marco
2394 Ricky
然后在游戏菜单中,您可以选择书签,文本文件将被读取并显示在屏幕上,一个分数在另一个分数下,并带有每个游戏中写入的名称。
现在我的问题是我希望对书签进行排序,最高的在顶部,但我不知道如何做到这一点,因为我在每行中有一个 int 和一个字符串,并且它们是相关的,因此我可以没有一个分数文件和一个姓名文件,因此当我订购分数时,我丢失了有关谁获得每个分数的信息。
我该如何解决这个问题?
编辑: 我正在添加与我的问题相关的代码部分。 这是显示书签的方法
static void ReadBookmark()
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("BOOKMARKS");
string myfile = @"bookmarks.txt";
if (File.Exists(myfile) == false)
{
Console.WriteLine("\n");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("NO BOOKMARKS. PLAY SOME GAMES!");
Console.Write("\nPRESS A KEY TO RETURN...");
Console.ReadKey();
}
else
{
Console.WriteLine("\n");
Console.ForegroundColor = ConsoleColor.Green;
using (StreamReader sr = File.OpenText(myfile))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine($"\t{s}");
}
}
Console.ForegroundColor = ConsoleColor.White;
Console.Write("\n\nPRESS A KEY TO RETURN...");
Console.ReadKey();
}
}
这是将名称和分数写入文件的代码。
public void SaveBookmark(int score, string name)
{
string myfile = @"bookmarks.txt";
using (StreamWriter sw = File.AppendText(myfile))
{
sw.WriteLine($"{score} {name}");
}
}
最佳答案
您可以按空格分割每一行,然后使用 int.Parse
获取第一部分的数值,然后使用该值OrderByDescending
:
var orderedLines = File.ReadLines(myfile)
.OrderByDescending(line => int.Parse(line.Split()[0]))
.ToList();
关于c# - 从文本文件中读取并对行进行排序(每行 int + String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62560386/