/// <summary> /// Находит дублирующие строки в списке по дате имени и фамилии, из двух строк делает одну, вторую удаляет. /// </summary> /// <param name="listHoursWorked"></param> /// <returns></returns> public List <string> FindDuplicateLines(List <string> listHoursWorked) { ReportLine repLine = new ReportLine(); DateTime date = new DateTime(); DateTime nextDate = new DateTime(); int nextItem; for (int i = 0; i < listHoursWorked.Count; i++) { date = repLine.GetDateFromString(listHoursWorked[i]); if (i < listHoursWorked.Count - 1) { nextItem = i + 1; nextDate = repLine.GetDateFromString(listHoursWorked[nextItem]); if (date == nextDate) { var nameAndSurname = repLine.GetNameAndSurnameFromString(listHoursWorked[i]); var nextNameAndSurname = repLine.GetNameAndSurnameFromString(listHoursWorked[nextItem]); // Если имя и фамилия в строке, равна имени и фамилии в селдующей строке списка. if (nameAndSurname.Item1 == nextNameAndSurname.Item1 && nameAndSurname.Item2 == nextNameAndSurname.Item2) { // Получаем все данные из строки. var data = repLine.GetDataFromString(listHoursWorked[i]); // Получаем рабочие часы и задачу из следующей строки. var nextData = repLine.GetHoursAndTaskFromString(listHoursWorked[nextItem]); // Складываем рабочие часы из двух строк. data.Item4 += nextData.Item1; // Создаем новую строку с задачами из текущей строки и следующей строки. data.Item5 = $"{data.Item5} {nextData.Item2}"; // Общее рабочее время за сутки не может привышать 24 часа. if (data.Item4 > 24) { data.Item4 = 24; } // Создаем новую строку. string newLine = repLine.CreateReportLine(data.Item1, data.Item2, data.Item3, data.Item4, data.Item5); // Удаляем следующую строку. listHoursWorked.RemoveAt(nextItem); // Записываем новую строку по текущему индексу. listHoursWorked[i] = newLine; i--; } } } } return(listHoursWorked); }