我想在C#中初始化一个C ++ - 多维度的矢量作为一个班级(教师),其中一个特定的教师(成员)可以教一个或多个科目,让'说:
A老师教授生物学 但 B老师教授生物学和数学(等等)
我希望用户输入主题,以便用户可以按照自己的意愿增加主题数量,并且这个" list"可以按字母顺序排列到教师姓名。
这会是一个类结构,如果是,怎么样?
答案 0 :(得分:0)
您似乎要求使用多维数组,您可以在C#中声明,但这并没有充分利用类的强大功能:
var teachers = new string[2][];
teachers[0] = new [] {"Biology"};
teachers[1] = new[] { "Biology" , "Maths"};
最好是维护教师和科目的集合,然后使用Linq以您需要的任何顺序返回教师 - 科目对。我把主题保留为字符串,但在现实生活中,你可能希望将它们封装在一个类中。
void Main
{
School school = new School();
school.Add("Harry", "Quiddich");
school.Add("Ron", "Quiddich");
school.Add("Neville", "Herbology");
school.Add("Hermione", "Herbology");
school.Add("Hermione", "Divination");
var orderedTeachers =
school.Teachers.OrderBy(t => t.TeacherName)
.SelectMany(
x => x.Subjects.OrderBy(s => s).Select(s => new {Teacher = x.TeacherName, Subject = s}));
}
internal class School
{
internal List<string> TaughtSubjects { get; } = new List<string>();
internal List<Teacher> Teachers { get; } = new List<Teacher>();
internal void Add(string teacherName, string subjectName)
{
// check to see if we have alreay defined this subject
var subject = TaughtSubjects.SingleOrDefault(s => s == subjectName);
// else create the subject and add to the school curriculum
if (subject == null)
{
subject = subjectName;
TaughtSubjects.Add(subject);
}
// check to see if the teacher is already on the school payroll
var teacher = Teachers.SingleOrDefault(s => s.TeacherName == teacherName);
// if not then add him or her
if (teacher == null)
{
teacher = new Teacher(teacherName);
Teachers.Add(teacher);
}
// check that the teacher isn't already down for teaching that subject before making the link
if (!teacher.Subjects.Contains(subject))
teacher.Subjects.Add(subject);
}
}
internal class Teacher
{
internal Teacher(string teacherName)
{
TeacherName = teacherName;
}
internal string TeacherName { get; }
public List<string> Subjects { get; } = new List<string>();
}