自从我们今年开始学习基础知识以来,我对编码和所有这些都不是很在行,我的小组成员也没有做任何事情来帮助我,所以我在这里迷路了,想向这里所有的Maven寻求帮助。
我想知道如何正确地对文本框中的混合数据进行排序(我正在使用控制台应用程序访问窗口和表单,因为这是我们的教授希望我们做的)。如下图所示,它按字母顺序排列,而不是按分数降序排列,球员的名字在他们的分数旁边。
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);
}
这仅仅是我整个代码的一小部分,但我认为这是使我的排行榜正常工作最重要的部分。
this is what my code results to, as of now...
1条答案
按热度按时间ac1kyiln1#
现在你把文件的每一行都当作一个字符串来读,所以“score”和“text”没有区别,都是一个文本值。
听起来你 * 想要 * 的是把信息解析成一个具有两个不同属性的对象。
那么你的清单应该是这样的:
要添加到它,你需要解析来自
line
的信息,创建一个新的ScoreListing
对象。填充了
List<ScoreListing>
后,可以使用.OrderBy()
对其进行排序,例如:有多种方法来存储数据,对数据进行排序等等。但是总的来说,当你有一个像
"123 | SomeText"
这样的值时,你 * 真正 * 拥有的是一个具有两个不同属性的自定义序列化对象。当你将这些数据读入内存时,你的第一个目标应该是将它反序列化为那个有意义的对象。然后你就可以很容易地用你喜欢的方式使用那个对象了。应要求,关于将数据 * 转换回 * 字符串的更多信息...
最面向对象的方法是在类上重写
.ToString()
:然后可以将其添加到字符串列表中:
在不覆盖
.ToString()
的情况下,您只需手动执行相同的操作: