Есть класс:
class MyFirstClass
{
public int Id { get; set; }
public int[] OOP { get; set; }
public int[] arrayProgram { get; set; }
}
Есть текстовый файл:
9;44;32;95;84;72;89;12;34;88
7;32;61;45;90;53;87;22
В класс мы считываем информацию из файла в следующем методе:
MyFirstClasses = new List<StopInRoad>();
static void ReadData(out List<MyFirstClass> MyFirstClasses)
{
MyFirstClasses= new List<MyFirstClass>();
using (var sr = new StreamReader("../../file.txt"))
{
string line;
string[] parts;
line = sr.ReadLine(); // считываем новую строку
parts = line.Split(';'); // сплитим строку
int countOOP = int.Parse(parts[0]); // количество элементов в int-овом массиве
int[] oop = new int[countOOP]; // создаём новый массив с размером, который только что считали
for (int i = 0; i < countOOP; i++) // пробегаем циклом по массиву, добавляя в него элементы строки по порядку, начиная со второго
{
oop[i] = int.Parse(parts[(i + 1)]); // добавляем в массив элементы строки по порядку, начиная со второго
};
line = sr.ReadLine(); // считываем новую строку
parts = line.Split(';'); // сплитим строку
int countProgram = int.Parse(parts[0]); // количество элементов в массиве arrayProgram
int[] arrayProgram = new int[countProgram];
for (int i = 0; i < countStops; i++) // пробегаем циклом по массиву, добавляя в него элементы строки по порядку, начиная со второго
{
arrayProgram[i] = int.Parse(parts[(i + 1)]); // добавляем в массив элементы строки по порядку, начиная со второго
};
var MyFirstClass = new MyFirstClass // переменной MyFirstClass присваиваем все значения класса MyFirstClass
{
Id = 1,
OOP = oop,
arrayProgram = arrayProgram
};
MyFirstClasses.Add(MyFirstClass); // добавляем все данные в List MyFirstClass
}
Console.WriteLine();
}
Вопросы:
Как из метода Main и из другого метода обратиться к переменной Id и массиву OOP класса MyFirstClass по индексу?
Как сделать метод, который вызывался бы из класса Main и выводил в консоль все элементы массивов по порядку?
Создать метод, который будет находить сумму всех элементов массива до второго элемента. На вход массив с элементами, на выход найденная сумма типа int
Я не уверен, что вы именно эту логику хотели реализовать, но теме не менее вот что у меня получилось:
void Main()
{
var data = ReadDataFromFile(@"C:\downloads\asdf123.txt");
foreach (var element in data)
{
PrettyPrint(element);
Console.WriteLine();
}
}
public void PrettyPrint(MyFirstClass element)
{
Console.WriteLine("element id is {0}", element.Id);
Console.WriteLine("oop:");
foreach (var el in element.OOP)
{
Console.WriteLine(el);
}
Console.WriteLine("arrayProgram:");
foreach (var el in element.arrayProgram)
{
Console.WriteLine(el);
}
}
public static List<MyFirstClass> ReadDataFromFile(string filename)
{
var result = new List<MyFirstClass>();
var strings = File.ReadLines(filename);
using (var sr = new StreamReader(filename))
{
var oop = ParseLine(sr.ReadLine());
var arrayProgram = ParseLine(sr.ReadLine());
var MyFirstClass = new MyFirstClass
{
Id = 1,
OOP = oop,
arrayProgram = arrayProgram
};
result.Add(MyFirstClass);
}
return result;
}
public static int[] ParseLine(string line)
{
var parts = line.Split(';');
int countOOP = int.Parse(parts[0]); //int countOOP = parts.Length - 1;
int[] result = new int[countOOP];
for (int i = 0; i < countOOP; i++)
{
result[i] = int.Parse(parts[(i + 1)]);
};
return result;
}
// Define other methods and classes here
public class MyFirstClass
{
public int Id { get; set; }
public int[] OOP { get; set; }
public int[] arrayProgram { get; set; }
}
Повыше функция печати вашего списка (напрашивался массив MyFirstClass[] но оставил для наглядности как было.
Также вызывает вопросы необходимость расчёта countOOP - если мы знаем размер после split'а - и можем рассчитать. Представьте, что у вас весь файл бы из строк вида 44;32;95;84;72;89;12;34;88|32;61;45;90;53;87;22 - разве не удобнее?
Не уверен, что в файле будет только две строки, напрашивалось прочитать весь файл в цикле.
Ну и разбил код на отдельные функции для облегчения понимания.
Update. Суммирование первых числе массива: классический способ и через linq:
// Вариант 1
public int Sum1(int[] arr, int count)
{
var result = 0;
for(var i = 0; i < count; i++)
result += arr[i];
return result;
}
// Вариант 2
public int Sum2(int[] arr, int count)
{
return arr.Take(count).Sum();
}
Например
var oop = new[] {44, 32, 95, 84, 72, 89, 12, 34, 88};
var sum = Sum1(oop, 2);
выведет 76.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости