【问题标题】:Comparing the min and max of n amount of array lists to get and overall min and max比较 n 个数组列表的最小值和最大值以获取总体最小值和最大值
【发布时间】:2018-10-30 07:12:10
【问题描述】:

我需要从一组数组列表中得到一个整体的最小值和最大值。每个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;
}

我被告知要遍历每个并提取每个的最小值和最大值,然后比较它们。我已经得到了每个的最小值和最大值,但是比较 arrayLists 的最小值和最大值是我有一个逻辑块的地方。

【问题讨论】:

  • 不鼓励使用 arraylist 来支持 list,顺便说一句。
  • 感谢您指出这一点,但这是否可以更轻松地比较列表的最小值和最大值。你也能告诉我为什么我被否决了吗?我不够具体吗?
  • 我刚刚意识到我之前的评论可能会以一种令人反感的方式出现,这并不是故意的。
  • 这里没有冒犯,不,不是我的反对意见。 List 内置了许多 Linq 好东西;例如:最小值和最大值,然后是一些函数。但由于我避免使用 ArrayList,我无法评论或与任何能力进行比较。
  • 这里是如何从数组中找到最大值的示例。 stackoverflow.com/questions/1690428/… 它在 C 中,但您只需要在 C# 中具有相同的逻辑。逻辑在 for 循环中。

标签: c# arrays sorting arraylist


【解决方案1】:

由于 OP 的建议,我一直保持这个答案。

我会建议List&lt;Student&gt; 并使用 LINQ 给List&lt;int&gt;List&lt;double&gt; 评分:

每位学生的最高成绩:

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();

【讨论】:

  • 那么这排除了 getMin 和 getMax 函数,我假设。或者更确切地说,我将函数中的代码替换为它们各自的 LINQ 函数。
  • 在 Student getMax() 中只有 1 行:return grades.Max();(和 Min() for getMin())
  • 也可以尝试不使用 .Select(...) 。让我知道它是否有效。
  • 它给了我一个错误说'ArrayList' does not constain a definition for 'Min'
  • 我忽略了grades.Max().Min(),因为它给了我一个错误。我将原始代码保留在函数中,并且只使用了您发布的总体最大和最小行。现在,如果找到max,程序会找到min,即arraylist 所在的max
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多