C#中的矢量类类结构,多维

时间:2016-08-13 16:45:27

标签: c# list vector

我想在C#中初始化一个C ++ - 多维度的矢量作为一个班级(教师),其中一个特定的教师(成员)可以教一个或多个科目,让'说:

A老师教授生物学 但 B老师教授生物学和数学(等等)

我希望用户输入主题,以便用户可以按照自己的意愿增加主题数量,并且这个" list"可以按字母顺序排列到教师姓名。

这会是一个类结构,如果是,怎么样?

1 个答案:

答案 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>();
}