比较n个数组列表的最小值和最大值以及总体最小值和最大值

时间:2018-05-20 13:02:56

标签: c# arrays sorting arraylist

我需要从一组arraylists中获得总体最小值和最大值。每个arraylist是学生的5个等级。

学生数量和输入的成绩(在static void main中完成):

Console.WriteLine("Input the number of students: ");
int n = int.Parse(Console.ReadLine());

Student[] students = new Student[n];

for (int i = 0; i < n; i++)
{
    students[i] = new Student();
    for (int j = 0; j < 5; j++)
    {
        Console.WriteLine($"Enter grade {j} for student {i}: ");
        double grade = double.Parse(Console.ReadLine());
        students[i].addGrade(grade);
    }
}

成绩的arrayList在Student类中创建:

private ArrayList grades;

public Student()
{
    grades = new ArrayList();
}

public void addGrade(double val)
{
    grades.Add(val);
}

然后分别使用getMin和getMax函数中的sort来计算每个学生的最小值和最大值。这些函数位于Student类中:

public object getMax()
{
    ArrayList sortArrayList = grades;
    sortArrayList.Sort();
    sortArrayList.Reverse();

    var max = sortArrayList[0];

    return max;
}

public object getMin()
{
    ArrayList sortArrayList = grades;
    sortArrayList.Sort();

    var min = sortArrayList[0];

    return min;
}

我被告知要迭代每个并提取每个的最小值和最大值,然后比较它们。我已经获得了每个的最小值和最大值,但是要比较阵列列表&#39;最小值和最大值是我有逻辑块的地方。

1 个答案:

答案 0 :(得分:0)

由于OP的建议,我保持这个答案的开放。

我建议List<Student>并使用LINQ评分为List<int>List<double>

每位学生的最高成绩:

grades.Max();

您可以让Student.getMax()返回该单行。

总体最大值:

var overallMax = students.OrderByDescending(st=> st.getMax())
                 .First().getMax();

总体分钟:

Student.getMin()中的

只返回grades.Min()

然后

var overallMin = students.OrderByAscending(st=> st.getMin())
                 .First().getMin();