在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。我也不知道当我发现最大的结果时,如何将它与学生的名字联系起来。
我建议使用一个类来保存所有属性,这大大提高了可读性:
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
要找到最高分数,可以像这样使用Linq
和Regex
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(' '))));
对于每个条目,创建一个从"的最后一个索引开始的子字符串,然后将其转换为整数。然后返回这些值的最大值。