在c#数组中查找最大值

本文关键字:查找 最大值 数组 | 更新日期: 2023-09-27 18:26:50

我正在c#中制作一个程序,该程序将从文本文档中获取一个名称和分数列表,自行获取分数,然后找到最高分数。当它只有一个时,我可以将名称与分数分开,但一旦我尝试将其作为一个数组,我就不知道自己在做什么。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
    static void Main(string[] args)
    {
        System.IO.File.Exists(@"U:'StudentExamMarks.txt");
        string[] text = System.IO.File.ReadAllLines(@"U:'StudentExamMarks.txt");
        int a = 0;
        string[] results = new string[a];
        for(int i=0;i<text.Length ; i++ )       
        {
            int x = text[i].LastIndexOf("'t");
            int y = text[i].Length;
            int z = (y - (x + 1));
            results[a] = text[i].Substring((x+1), (z));
            a++;
            Console.WriteLine("{0}", results);
        }
    }
}

这就是我目前所拥有的清单如下

约翰·克罗斯100克里斯蒂娜·钱德勒105
Greg Hamilton 107
珍珠贝克尔111
Angel Ford 115
Wendell Sparks 118

就像我在没有数组的情况下尝试时所说的那样,我可以让它显示第一个结果中的100。我也不知道当我发现最大的结果时,如何将它与学生的名字联系起来。

在c#数组中查找最大值

我建议使用一个类来保存所有属性,这大大提高了可读性:

public class StudentExam
{
    public string StudentName { get; set; }
    public int Mark { get; set; }
}

然后读取所有行并填充List<StudentExam>:

var lines = File.ReadLines(@"U:'StudentExamMarks.txt")
    .Where(l => !String.IsNullOrWhiteSpace(l));
List<StudentExam> studentsMarks = new List<StudentExam>();
foreach (string line in lines)
{
    string[] tokens = line.Split(''t');
    string markToken = tokens.Last().Trim();
    int mark;
    if (tokens.Length > 1 && int.TryParse(markToken, out mark))
    { 
        StudentExam exam = new StudentExam{
            Mark = mark,
            StudentName = String.Join(" ", tokens.Take(tokens.Length - 1)).Trim()
        };
        studentsMarks.Add(exam);
    }
}

现在很容易获得最大标记:

int maxMark = studentsMarks.Max(sm => sm.Mark);  // 118

要找到最高分数,可以像这样使用LinqRegex

var lines = new[] {
    "John Cross 100",
    "Christina Chandler 105",
    "Greg Hamilton 107",
    "Pearl Becker 111"
};
var maxScore = lines.Max(l => int.Parse(Regex.Match(l, @"'b'd+'b").Value));

在这里,我假设您已经将文件正确地读取到lines中,并且所有文件都具有有效的int分数值。

如果每个条目的末尾总是一个空格,后面跟着学生的分数,则可以使用一个简单的子字符串:

int max = text.Max(x => Convert.ToInt32(x.Substring(x.LastIndexOf(' '))));

对于每个条目,创建一个从"的最后一个索引开始的子字符串,然后将其转换为整数。然后返回这些值的最大值。