所以我必须从文本文件中读取一些文本
S3333;50 50 50 50
S2222;20 50 40 70
90 80 90 85
S4444;70 80 90 50
我应该把文本变成2个数组。一个数组存储学生的ID,另一个数组存储学生的分数(2d数组)。
现在我需要按字母顺序排列学生证。我如何排序二维数组基于我如何排序一维数组?
全面披露:我是C程序员,不是c#程序员,所以这可能不是标准的c#方法。不管怎样,它会工作,它是可读的,它是有意义的。这是我在c++或java中会做的事情,所以我打赌它会延续到c#。
我将从我的老派C背景中拿出一页,并说我认为结构的概念在这里可能会有所帮助。
如果你在c#编程,你可能知道什么是类,对吧?结构体就是一个将其所有内部变量都公开的类。如果我必须从文件中读取具有id#和薪水的员工列表,然后按id号对它们进行排序,那么我将拥有这样的结构体:
public struct employee
{
int idnum;
int yearly_salary;
String name;
}
每次声明一个新的雇员变量时,它都带有3个"字段"(idnum
, yearly_salary
, name
)。看看这个例子。它创建了两个名为emp1和emp2的新员工结构。
employee emp1;
emp1.name = "Lisa Goodwin";
emp1.yearly_salary = 129200;
emp1.idnum = 3911;
employee emp2;
emp2.name = "Sevn Rushbjorn";
emp2.yearly_salary = 39800;
emp2.idnum = 8721;
如果我们想打印id#最低的员工的工资,我们可以这样做:
if(emp1.idnum < emp2.idnum)
{
Console.WriteLine("salary = ${0}n", emp1.yearly_salary);
}
else
{
Console.WriteLine("salary = ${0}n", emp2.yearly_salary);
}
最重要的是,当你交换数组中的两个雇员时,当然,它们对应的所有值都会被交换。
employee emps[4];
//...... initialize vars from file or whatever...
swap<employee>(emps[3], emps[2]);
使用这些概念,您可以比较排序方法中的id#(我假设您是自己编写的,因为这听起来像作业),并使用c#的标准swap函数来交换两个雇员(或者,在您的情况下,是学生)。
简单地把我的"雇员"的例子适用于学生,这应该工作良好。