C# 对文本文件进行排序,其中每行都是一个名称,后跟一个分数

C# 对文本文件进行排序,其中每行都是一个名称,后跟一个分数,c#,xna,C#,Xna,我打算为XNA比赛制作一个记分牌,但我在想怎么做时遇到了一些困难。玩家在完成一个关卡后,会在提示时输入他的名字。他的名字和时间将记录在一个文本文件中,如下所示: sam 90 james 64 matthew 100 我正试图找出一种方法,只按所用时间对这些数据进行排序,而不考虑名称 我还没有开始编写这个,但如果有人能给我任何想法,我将不胜感激 为什么不将其制作成一个数据库文件.sdf,如果需要,您可以轻松地动态创建该文件。最好是跟踪数据,以便排序和将来重用 SQLite正是为了这个目的而设计

我打算为XNA比赛制作一个记分牌,但我在想怎么做时遇到了一些困难。玩家在完成一个关卡后,会在提示时输入他的名字。他的名字和时间将记录在一个文本文件中,如下所示:

sam 90
james 64
matthew 100
我正试图找出一种方法,只按所用时间对这些数据进行排序,而不考虑名称


我还没有开始编写这个,但如果有人能给我任何想法,我将不胜感激

为什么不将其制作成一个数据库文件.sdf,如果需要,您可以轻松地动态创建该文件。最好是跟踪数据,以便排序和将来重用


SQLite正是为了这个目的而设计的,它使基本的CRUD操作变得轻而易举。如果您的游戏不断发展,并且您希望开始使用它来下载/上传高分并与朋友/世界共享分数,那么您还可以加密数据库文件

不要误解我的意思,这肯定比简单地解析一个文本文件要多一些工作,但它是未来的证明,您可以直接从包中获得很多功能,而无需编写解析器和复杂的搜索例程等


XML是另一种选择,即JSON。这三个都是不错的选择。一个纯文本文件可能不是最好的选择,因为最终可能会导致更多的工作。

首先,使用
file.ReadAllLines(…)
读取文本文件,这样就可以得到一个字符串数组。然后迭代数组,在空白处拆分每个字符串(假设用户不能在名称中输入空格),并在第二个元素上排序,该元素应为分数。您必须使用
int.Parse(…)
将其转换为字符串才能正确排序

string[] scores = File.ReadAllLines("scorefile.txt");
var orderedScores = scores.OrderByDescending(x => int.Parse(x.Split(' ')[1]));

foreach (var score in orderedScores)
{
    Console.WriteLine(score);
}
//outputs:
//matthew 100
//sam 90
//james 64

我建议使用类似分号的方式来分隔名称和分数,而不是使用空格,因为这样在允许用户在名称中输入空格的情况下更容易处理。

创建分数表如下所示:

name::score
读每一行每一行

string line = "Sam::255";
string name = line.split("::")[0];

也要做与分数类似的操作。

将文件读入内存,将每行拆分为名称/编号,按编号排序。如果你被卡住了,写下你走了多远。也用分隔符分隔字段,我没想到。谢谢你的帮助,这应该会让你更容易使用:]如果你问我的话,对于像一个带有两个字段的分数文件这样简单的东西来说,SQL有点过分了。我曾考虑过提到一个XML文件,但对于这种简单的数据记录来说,即使是这个文件也有点太重了。当然,这取决于您是否打算以多种方式使用分数数据。SQLite正是为了这个目的而设计的,它可以快速轻松地执行CRUD操作。如果游戏扩大,他想保留更多的信息,这将是未来的证明。同意XML也是一个很好的选择,特别是对于下载/上传目的,我不是在争论SQL server体系结构(服务器、SQL CE文件等)的开销,而是在使用SqlCommand或类似LINQ2SQL的东西与SQL接口时的代码开销。对于一件如此简单的事情,它会无缘无故地使事情复杂化。但我确实同意,使用嵌入式SQL db将更加经得起未来的考验。非常感谢,这显然是最有效、最优雅的方法。