2016-07-11 4 views
0

Я все еще новичок в C#, и я не нашел решение, которое исправляет мою проблему.C# сравнить различные несортированные массивы

Я сделал это пару месяцев назад, и до этого он работал достаточно хорошо, но я могу предвидеть некоторые проблемы в будущем, когда группа станет больше. У меня есть файл журнала, который содержит все виды материалов, но меня интересуют только «старт» и «остановка» всех учеников. Каждую неделю я запускаю этот код, чтобы проверить, все ли начаты и остановились в правильное время. Не каждый учащийся приходит каждый день: у некоторых есть только три стартовых и 3 остановки в неделю, у некоторых есть 4 или 5. Я создал массивы со справочными значениями для каждого ученика (например, Student1StartTimes).

В настоящий момент код дважды проверяет файл журнала для записей конкретного учащегося. Один раз для их времени начала и один раз для их времени остановки. Они попадают во временный массив и сравниваются с их ссылочными значениями. Они не должны точно соответствовать, в нескольких минутах ходьбы. Порядок записей конкретного учащегося важен, так как время начала/остановки может зависеть от того дня, когда они были введены.

Пример показан ниже. Как говорилось ранее, это работает для моей цели, но поскольку количество студентов увеличивается, так и количество циклов, и я чувствую, что это можно сделать гораздо эффективнее.

List<LogEntry> TempList = new List<LogEntry>(); 

foreach (LogEntry log in LogFile) 
{ 
    if (log.Student == "student1" && log.Type.ToString().Equals("Start")) 
    { 
     TempList.Add(log); 
    } 
} 
for (int i = 0; i < TempList.Count; i++) 
{ 
    Console.WriteLine("The difference in time is " + TimeDifference(TempList[i].StartTime, Student1StartTimes[i]) + " minutes.");   
} 
TempList.Clear(); //Clear the temporary list 

foreach (LogEntry log in LogFile) 
{ 
    if (log.Student == "student2" && log.Type.ToString().Equals("Start")) 
    { 
     TempList.Add(log); 
    } 
} 
for (int i = 0; i < TempList.Count; i++) 
{ 
    Console.WriteLine("The difference in time is " + TimeDifference(TempList[i].StartTime, Student2StartTimes[i]) + " minutes.");  
} 
TempList.Clear(); //Clear the temporary list 
+3

Я голосую, чтобы закрыть этот вопрос не по теме, так как код уже работает; проблема не решена. – Servy

+1

Возможно, перейдите по адресу http://codereview.stackexchange.com/ – HimBromBeere

+0

И посмотрите на параллельные расширения, пока вы на нем также HashSet, если это разрешено. – Jay

ответ

0

Вы храните ученика в коллекции?

Если так Переберите каждый студент, в рамках цикла студента вы можете затем цикл через журнал:

foreach (Student s in Students){ 

    foreach (LogEntry log in LogFile) 
    { 
     if (log.Student.equals(s) && log.Type.ToString().Equals("Start")) 
     { 
      TempList.Add(log); 
     } 
    } 
    for (int i = 0; i < TempList.Count; i++) 
    { 
     Console.WriteLine("The difference in time is " + TimeDifference(TempList[i].StartTime, Student1StartTimes[i]) + " minutes.");   
    } 
    TempList.Clear(); //Clear the temporary list 

} 
Смежные вопросы