2016-07-11 10 views
0

Ich bin immer noch ein Anfänger in C# und ich habe keine Lösung gefunden, die mein Problem behebt.C# verschiedene unsortierte Arrays vergleichen

Ich habe dies vor ein paar Monaten gemacht und es funktionierte bis jetzt gut genug, aber ich kann einige Probleme in der Zukunft vorhersehen, wenn die Gruppe größer wird. Ich habe eine Log-Datei, die alle möglichen Sachen enthält, aber ich bin nur an den "Start" - und "Stopp" -Zeiten aller Schüler interessiert. Jede Woche führe ich diesen Code aus, um zu überprüfen, ob alle zum richtigen Zeitpunkt gestartet und gestoppt haben. Nicht alle Studenten kommen jeden Tag: einige haben nur 3 Start und 3 Stopp-Einträge pro Woche, einige haben 4 oder 5. Ich habe Arrays mit Referenzwerten für jeden Schüler gemacht (zum Beispiel Student1StartTimes).

Im Moment scannt der Code das Logfile zweimal für Einträge eines bestimmten Studenten. Einmal für ihre Startzeiten und einmal für ihre Stoppzeiten. Diese werden in einem temporären Array platziert und mit ihren Referenzwerten verglichen. Sie müssen nicht genau übereinstimmen, ein paar Minuten sind in Ordnung. Die Reihenfolge der Einträge eines bestimmten Studenten ist wichtig, da ihre Start-/Stoppzeiten vom Tag der Eingabe abhängen können.

Ein Beispiel wird unten gezeigt. Wie bereits gesagt, scheint es für meinen Zweck zu funktionieren, aber wenn die Anzahl der Studenten steigt, nimmt auch die Anzahl der for-Schleifen zu, und ich denke, das könnte viel effizienter gemacht werden.

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

Ich wähle diese Frage zu schließen, wie Off-Topic, da der Code bereits funktioniert; Es gibt kein Problem, das gelöst werden muss. – Servy

+1

Sollte wohl http://codereview.stackexchange.com/ – HimBromBeere

+0

gehen und in die Parallelerweiterungen schauen, während es bei Ihnen auch HashSet gibt, wenn die Zuordnung erlaubt. – Jay

Antwort

0

Speichern Sie den Schüler in einer Sammlung?

Wenn so eine Schleife durch jeden Schüler, in der Schüler-Schleife Sie können dann die Schleife durch das Protokoll:

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 

}