C# - как мне получить максимальное значение из списка, а затем получить элементы этой строки
Во-первых, Всем привет. Я работаю над приложением FormsApp. Мой вопрос заключается в том, что у меня есть linq-код, который читает файл, создает мне список объектов из этого файла (на основе созданных мной переменных). Мой класс переменных выглядит следующим образом:
class Atom { public string atom_keyword; public int atom_no; public string atom_name; public string amino_name; public char chain; public int amino_no; public float x_coordinate; public float y_coordinate; public float z_coordinate; public float ratio; public float temperature; public char sec_atom; }
И мой файл выглядит так:
ATOM 1 N MET A 1 -13.878 31.694 -3.970 1.00 52.63 N ATOM 2 CA MET A 1 -13.202 30.367 -3.923 1.00 53.98 C ATOM 3 C MET A 1 -12.645 30.015 -5.292 1.00 54.54 C ATOM 4 O MET A 1 -11.628 29.330 -5.413 1.00 54.54 O ATOM 5 CB MET A 1 -14.175 29.281 -3.472 1.00 55.49 C ATOM 6 CG MET A 1 -13.527 28.198 -2.635 1.00 57.84 C ATOM 7 SD MET A 1 -12.733 28.897 -1.159 1.00 62.51 S
Я разбиваю эти столбцы и помещаю их в массив, а затем в свой список. Мой главный выглядит так.
// theese lines works under a button1_Click.. string filePath = @"somePath"; string stringToSearch = @"ATOM"; List<Atom> Atoms = File.ReadAllLines(filePath) // Read all the lines .Where(line => line.StartsWith(stringToSearch)) // Filter (because file has some other things besides ATOM parts..) .Select(line => { // Split the line on the space character into an array var strArray = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Return a new Atom for each line based on the array contents return strArray.Length < 12 // Ensure we have at least 12 elements in the array ? null // If we don't have 12, return 'null' : new Atom // Otherwise return a new atom from the array { atom_keyword = strArray[0], atom_no = int.Parse(strArray[1]), atom_name = strArray[2], amino_name = strArray[3], chain = char.Parse(strArray[4]), amino_no = int.Parse(strArray[5]), x_coordinate = float.Parse(strArray[6]), y_coordinate = float.Parse(strArray[7]), z_coordinate = float.Parse(strArray[8]), ratio = float.Parse(strArray[9]), temperature = float.Parse(strArray[10]), sec_atom = char.Parse(strArray[11]) }; }) .ToList(); //add them to the list
Мой вопрос таков: Как мне получить максимальное значение переменной (например, максимальное значение x_coordinate), а затем работать с этой строкой. Например, какая строка имеет максимальное значение x_coordinate и каково имя атома этой строки?
Что я уже пробовал:
Я уже пробовал это сделать
float maxX = Atoms.Max(atom => atom.x_coordinate); label1.Text = Convert.ToString(maxX); //I'm printing the max value of x_coordinate to a label
Эта часть работает просто отлично. Но я хочу получить информацию о линии, где
maxX
переменная есть. Я имею в виду, какая линия имеет maxX
- а в чем дело? atom_name
из этой линии или что там еще amino_name
этой линии и т. д.. Затем я напечатаю необходимую информацию на этикетке..Есть ли способ или способ получить эту информацию? Я ищу, но пока не могу найти решение..