如何将txt文件的内容附加到数组中,但txt文件有不同的变量类型



自从我们今年开始学习基础知识以来,我对编码和其他方面都不太在行,我的团队成员也没有做任何帮助我的事情,所以我迷失在这里,想向这里的所有专家寻求帮助。

我想知道如何正确地对文本框中的混合数据进行排序(我使用console.application访问windows.Forms,因为这正是我们的教授希望我们做的(。正如你在下图中看到的,它是按字母顺序排列的,而不是按降序排列,球员的名字放在他们的分数旁边。

void show_Click(object sender, EventArgs e)
{
int counter = 0;
string line;
StreamReader TXT = new StreamReader("Leaderboard.txt");
List<string> list = new List<string>();
while ((line = TXT.ReadLine()) != null)
{
ListB1.Items.Add(line);
list.Add(line);
counter++;
}
string[] arr = list.ToArray();
Array.Sort(arr);
Array.Reverse(arr);
foreach (string item in arr)
{
ListB2.Items.Add(item);
}

这只是我整个代码的一小部分,但我认为这是使排行榜正常运行最重要的部分。

这就是我的代码结果,截至目前。。。

当前,您正在将文件的每一行作为单个字符串读取。因此;得分;以及";文本";,这只是一个文本值。

听起来,想要将信息解析为具有两个不同属性的对象。例如,假设您有这样的类:

public class ScoreListing
{
public int Score { get; set; }
public string Text { get; set; }
}

那么你的清单会是这样的:

List<ScoreListing> list = new List<ScoreListing>();

要添加到其中,您需要解析来自line的信息以创建一个新的ScoreListing对象。例如,它可能看起来像这样:

while ((line = TXT.ReadLine()) != null)
{
var elements = line.Split(' | ');
var listing = new ScoreListing
{
Score = int.Parse(elements[0]),
Text = elements[1]
};
list.Add(listing);
counter++;
}

一旦你有了一个填充的List<ScoreListing>,你就可以用.OrderBy()对它进行排序,例如:

var sortedLeaderboard = list.OrderByDescending(l => l.Score);

有多种方法可以处理数据存储、数据排序等。但总的来说,当你有一个像"123 | SomeText"这样的值时,你真正拥有的是一个具有两个不同属性的自定义序列化对象。将这些数据读入内存时,您的第一个目标应该是将其反序列化为那个有意义的对象。然后你就可以随心所欲地使用这个对象了。


根据请求,将数据转换回字符串的更多信息。。。

最面向对象的方法是覆盖类上的.ToString()

public class ScoreListing
{
public int Score { get; set; }
public string Text { get; set; }
public override string ToString()
{
return $"{Score} | {Text}";
}
}

然后您可以将其添加到字符串列表中:

foreach (var item in sortedLeaderboard)
{
ListB2.Items.Add(item.ToString());
}

如果不覆盖.ToString(),您只需手动执行相同的操作:

foreach (var item in sortedLeaderboard)
{
ListB2.Items.Add($"{item.Score} | {item.Text}");
}

最新更新