Ich arbeite an einer Spesen-Tracking-Anwendung, wo ein Benutzer Informationen eingibt und einige Analysen am Back-End durchgeführt werden. Jeder Ausgabeneintrag hat vier Elemente - Datum, Kategorie, Betrag, Kommentar. Diese werden in eine Kategorieliste eingespeist, deren Einträge einen Namen, eine Summe und einen Prozentsatz haben. Wenn jetzt ein neuer Eintrag in der Ausgabenliste gemacht wird, löst dies ein Ereignis aus, das prüft, ob der Kategoriename existiert. Wenn dies der Fall ist, wird der Betrag zur Gesamtsumme der Kategorie hinzugefügt. Ist dies nicht der Fall, wird der Kategorieliste ein neuer Eintrag hinzugefügt. Die Summe aller Kategoriensummen wird auch als separate Variable beibehalten.Aktualisierungskategorie Prozentsätze in C# -Liste
Um aktualisierte Prozentsätze pro Kategorie zu haben, habe ich am Ende des Ereignisses eine for-Schleife, die jedes Element in der Liste durchläuft. Es nimmt die Kategorie total und teilt sie durch die Summe aller Summen auf, bevor es mit 100 multipliziert wird. Das macht den Job erledigt, aber scheint mir schlampig zu sein, wenn zu viel Arbeit an jedem Eintrag gemacht wird. Kann jemand einen effizienteren Weg empfehlen, dies zu tun? Ich füge den Ereigniscode unten ein, kann aber bei Bedarf weitere Informationen bereitstellen.
public void SelectedExpenseEntry_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
ExpenseEntry dummyEntry = (ExpenseEntry)sender;
if ((dummyEntry.ExpenseDate != "MM/DD/YYYY") && (dummyEntry.ExpenseCategory != "Category") && (dummyEntry.ExpenseAmount != 0) && (dummyEntry.ExpenseComment != "Comment"))
{
CategoryEntry TemperCategory = new CategoryEntry();
ExpenseEntry TempExpenseEntry = new ExpenseEntry();
TempExpenseEntry = dummyEntry;
TemperCategory.CategoryName = TempExpenseEntry.ExpenseCategory;
TemperCategory.CategoryTotal = TempExpenseEntry.ExpenseAmount;
TemperCategory.CategoryPercent = 0;
ListTotal = ListTotal + TempExpenseEntry.ExpenseAmount;
int index = SingleMonthsCategories.IndexOf(SingleMonthsCategories.Where(x => x.CategoryName == TemperCategory.CategoryName).FirstOrDefault());
if(index == -1)
{
SingleMonthsCategories.Add(TemperCategory);
}
else
{
SingleMonthsCategories[index].CategoryTotal = SingleMonthsCategories[index].CategoryTotal + TemperCategory.CategoryTotal;
}
for (int i = 0; i < SingleMonthsCategories.Count; i++)
{
SingleMonthsCategories[i].CategoryPercent = (SingleMonthsCategories[i].CategoryTotal/ListTotal) * 100;
};
}
}
Vielen Dank im Voraus,
Yusif Nurizade
Rechnen Sie die Prozentsätze jedes Mal neu, wenn Sie sie anzeigen? Sie sollten überlegen, sie in einem Wörterbuch zwischenzuspeichern, wenn dies der Fall ist. –
"Vorzeitige Optimierung ist die Wurzel allen Übels" - Donald Knuth –