所以我必须从文本文件中读取一些文本行
S5555; 100 70 70 100
S3333; 50 50 50 50
S2222; 20 50 40 70
S1111; 90 80 90 85
S4444; 70 80 90 50
我应该把文本变成2个数组。一个数组存储学生的ID,另一个数组存储学生的标记(2d数组)
现在我需要按字母顺序对学生ID进行排序。如何根据我对1d数组的排序方式对2d数组进行排序?
答案 0 :(得分:0)
完全披露:我是C程序员,而不是C#程序员,所以这可能不是标准的C#方法。无论如何,它会起作用,它是可读的,而且它是有道理的。这是我在c ++或java中会做的事情,所以我敢打赌它会延续到c#。
我要从我的老派C背景中取一页,并说我认为struct的概念在这里可能会有所帮助。
如果你正在编程c#,你可能知道一个类是什么,对吧?结构只是一个公共所有内部变量的类。如果我必须阅读一个id为' s的员工列表和一个文件的工资,然后按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;
如果我们想要打印身份号码最低的员工的薪水,我们可以执行以下操作:
if(emp1.idnum < emp2.idnum)
{
Console.WriteLine("salary = ${0}\n", emp1.yearly_salary);
}
else
{
Console.WriteLine("salary = ${0}\n", emp2.yearly_salary);
}
最重要的是,当您在数组中交换2名员工时,当然会交换所有相应的值。
employee emps[4];
//...... initialize vars from file or whatever...
swap<employee>(emps[3], emps[2]);
使用这些概念,您可以在排序方法中比较id#,(我假设您自己编写,因为这听起来像是家庭作业),并使用c#的标准交换功能来交换2名员工(或者,在您的情况下是学生)。
简单地调整我的员工&#34;对学生来说,这应该可以正常工作。
答案 1 :(得分:-2)
首先将文件解析为字符串数组,对其进行排序,然后从成绩中分离出来。
"S5555;100 70 70 100"
"S3333;50 50 50 50"
"S2222;20 50 40 70"
"S1111;90 80 90 85"
"S4444;70 80 90 50"
然后执行array.Sort(); 将id和等级分成新数组:
String[] fileData;
fileData.Sort();
String[] ids = new String[arraySize];
Int[][] grades = new Int[][arraySize];
for (int I = i;i<arraySize;i++)
{
string[] splitLine = fileData[i].Split(';');
ids[i] = splitLine[0];
string[] stringGrades = splitLine[1].Split(' ');
grades[i] = new int[stringGrades.Length];
for (int j = 0; j < stringGrades.Length; j++)
{
grades[i][j] = Convert.ToInt32(stringGrades[j]);
}
}