C#如何将项目读入数组

时间:2016-10-06 19:48:29

标签: c# arrays

我无法弄清楚如何从文本文件中读取项目并将它们放入int数组中。我的目标是计算平均成绩。为此,我需要阅读一个数字,告诉我1个学生有多少年级,然后使用这个数量,自己阅读成绩。例如,第一列显示成绩的数量,所有剩余的列显示成绩:

5;8;7;9;10;4 3;8;9;10 2;5;9

我写的代码:

        static void ReadData(out Student[] Student, out Faculty Faculty)
    {
        using (StreamReader read = new StreamReader(@"Data", Encoding.GetEncoding(1257)))
        {
            string line = null;
            Student = new Student[Faculty.CMax];
            Faculty = new Faculty();
            while (null != (line = read.ReadLine()))
            {
                string[] values = line.Split(';');
                string lastname = values[0];
                string name = values[1];
                string group = values[2];
                int amount = int.Parse(values[3]);
                int grades = int.Parse(values[4]);
                Student studen = new Student(lastname, name, group, amount, grades);
                Student.Take[Faculty.AmountOfStudents++] = studen;
            }
        }
    }

我知道int[] grades = int.Parse(values[4]);是问题所在。但我不知道如何解决它。可能是一个新手问题,谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在澄清之后,您似乎想要:

Smith;John;XYZ;4;2;4;6;8

并检索[2,4,6,8]的数组,以便从中获得平均值。

如果你不能做我在评论中提到的内容,那么这是一个解决方法。由于等级的数量是无关紧要的,只需忽略它,你就会发现你需要一个int数组,其中包含的项目比原来少4个。然后只是复制它们的问题:

string[] fields = val.Split(';');
int[] grades = new int[fields.Length - 4];
for (int i = 4; i < fields.Length; ++i)
{
    grades[i - 4] = int.Parse(fields[i]);
}

或者其他一些替代版本,如果你进入LINQ:

string[] fields = val.Split(';');
int[] grades = Enumerable.Range(4, fields.Length - 4)
    .Select(i => int.Parse(fields[i]))
    .ToArray();

string[] fields = val.Split(';');
int[] grades = fields.Select((s, i) => new { s, i })
    .Where(x => x.i >= 4)
    .Select(x => int.Parse(x.s))
    .ToArray();