我正在为我的计算机课程做一个测验游戏,我已经完成了我应用程序的测验部分,目前我正在进入排行榜,但是要做到这一点,我需要对包含用户名的分数文本文件进行排序,得分和时间,但我现在正尝试检索这些数据并将其显示在表格中。
用户的名称分数和时间可以很好地保存到分数文本文件中,但是要显示这些详细信息,我首先需要按分数排序这些详细信息。
我的测试文件的组织方式如下:
username,score,time
userName1,33,12
userName2,-55,33
userName3,34,2
userName4,23,27
userName5,63,72
这是我当前正在使用的代码,但是仅当我首先对文本文件中的数据进行排序时,该方法才有效。
string[] readFile = File.ReadAllLines(file).ToArray();
for (int i = 0; i < 5; i++)
{
string[] userDetails = File.ReadAllLines(file).ToArray();
string username = userDetails[0];
string score = userDetails[1];
// Apply the text of lblUsername1-5 to be what the names
// of the top 5 scorers are in the file.
lblUsername1.Text = userDetails[0].Split(',')[0];
lblUsername2.Text = userDetails[1].Split(',')[0];
lblUsername3.Text = userDetails[2].Split(',')[0];
lblUsername4.Text = userDetails[3].Split(',')[0];
lblUsername5.Text = userDetails[4].Split(',')[0];
// Apply the text of lblScore1-5 to be what the scores
// of the top 5 scorers are in the file.
lblScore1.Text = userDetails[0].Split(',')[1];
lblScore2.Text = userDetails[1].Split(',')[1];
lblScore3.Text = userDetails[2].Split(',')[1];
lblScore4.Text = userDetails[3].Split(',')[1];
lblScore5.Text = userDetails[4].Split(',')[1];
}
因此,如果有人可以帮助我对我的成绩ext文件中的数据进行排序,那就太好了。预先感谢。
答案 0 :(得分:1)
您可以使用linq对文件中的数据进行排序
string[][] userDetails = File.ReadAllLines(file).Select(s => s.Split(',')).OrderBy(arr => int.TryParse(arr[1], out int result) ? result : 0)).Take(5).ToArray();
lblUsername1.Text = userDetails[0][0];
lblUsername2.Text = userDetails[1][0];
lblUsername3.Text = userDetails[2][0];
lblUsername4.Text = userDetails[3][0];
lblUsername5.Text = userDetails[4][0];
// Apply the text of lblScore1-5
// to be what the scores of the top 5 scorers are in the file.
lblScore1.Text = userDetails[0][1];
lblScore2.Text = userDetails[1][1];
lblScore3.Text = userDetails[2][1];
lblScore4.Text = userDetails[3][1];
lblScore5.Text = userDetails[4][1];``
答案 1 :(得分:0)
您应该使用对象进行管理。您的班级应该是具有属性的用户,如下所述。
现在,您可以完全控制对象的排序和管理
using System.Collections.Generic;
using System.Linq;
public class User
{
public string Name { get; set; }
public int Score { get; set; }
public int Time { get; set; }
}
class Program
{
public static void Main(string[] args)
{
//This you get from file, no need for this in your code
string[] fromFile = new string[5]
{ "userName1,33,12", "userName2,-55,33", "userName3,34,2", "userName4,23,27", "userName5,63,72" };
List<User> users = new List<User>();
foreach (string line in fromFile)
{
string[] splitLine = line.Split(',');
users.Add(new User() { Name = splitLine[0], Score = int.Parse(splitLine[1]), Time = int.Parse(splitLine[2]) });
}
foreach (User oneUser in users.OrderByDescending(x => x.Score))
{
//Here the store to file or what you want to do
}
}
}