如何计算学生在班级中每个科目的位置?

时间:2021-02-27 10:17:57

标签: c# wpf datagrid

可以更清醒一点。我的实际意思是,我有一个数据网格,其中包含不同的列,例如 Id 列、名字和不同主题的列,下面是示例:

when each row from the sample datagrid is selected the all the scores for each subject column is shown in the textbox1. 像这样: sample before click event

当使用以下代码单击 button1 事件时:

 foreach(int mark in txtresult.ToString())
        {
            if (mark < 40)
            {
                string[] parts = txtresults.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                int[] numbers = parts.Select(p => int.Parse(p)).ToArray();
                **int maximum = numbers.Max();**
                int position = Array.IndexOf(numbers, maximum);
                parts[position] = "1".ToString();
                txtresults.Text = string.Join(" ", parts);
            }
            else if(mark >=40 && <50)
            {
                m="2th" position etc... within the above block of code
            }

sample after button click event

每个科目的分数应该根据指定的范围“if(mark <40)”进行排名,但它只是对 Max() 进行排名;文本框中的值,而不是文本框中的小值。

所以我的问题是:我如何在数据网格中对每个学生进行评分,例如:英语列我希望能够将最高的学生排名第一,第二高的排名第二......等等,以及循环遇到的任何地方文本框中的相似分数将具有相似的位置并继续排名。直到每个学生的所有分数都被排名; (例如 Eng =56, 78, 89, 76, 89.. 从此 89 => 1st; 89 =>1st; 78 => 3rd; 76 =>4th position; & 56=>5th position;)

1 个答案:

答案 0 :(得分:0)

您可以使用 LINQ 对集合的项目进行分组。

以下示例创建三个组:
“低”、“中”、“高”使用值规则
n < 10n >= 10 && n < 100n >= 100

var numericString = "1 2 12 15 123 757";
var numberGroups = numericString
  .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
  .Select(numericString => int.Parse(numericString))
  .GroupBy(number => number < 10
    ? "Low" 
    : number < 100 
      ? "Mid" 
      : "High");

// Access the groups
foreach (IGrouping<string, int> numberGroup in numberGroups)
{
  string groupName = numberGroup.Key; // E.g. "High"
  IEnumerable<int> groupValues = numberGroup; // 123, 757
}

并将相等的值分组:

var numericString = "100 20 12 100 20 20 48 100";
var numberGroups = numericString
  .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
  .Select(numericString => int.Parse(numericString))
  .GroupBy(number => number);

// Access the groups
foreach (IGrouping<int, int> numberGroup in numberGroups)
{
  int groupName = numberGroup.Key; // E.g. 100
  List<int> groupValues = numberGroup.ToList(); // 100, 100, 100
}
相关问题