我正在開發一個費用跟蹤應用程序,其中用戶輸入信息並在後端完成一些分析。每個費用條目都有四個元素 - 日期,類別,金額和評論。這些被輸入到一個分類列表中,其條目有一個名稱,總數和百分比。目前,在費用列表中創建新條目時,會觸發一個事件,查看是否存在類別名稱。如果是這樣,金額將被添加到類別總額中。如果沒有,則將新條目添加到類別列表中。所有類別總數的總和也作爲一個單獨的變量保存。更新C#列表中的類別百分比
爲了更新每個類別的百分比,我在遍歷列表中的每個元素的事件結尾處都有一個for循環。它將所有類別的總和除以所有總數的總和,然後再乘以100.這樣可以完成工作,但對於每項條目都做了太多工作,似乎對我來說很渺茫。任何人都可以推薦一種更有效的方法來做到這一點?我在下面包括事件代碼,但可以根據需要提供更多信息。
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;
};
}
}
由於提前,
Yusif Nurizade
您每次顯示它們時都重新計算百分比嗎?如果有的話,你應該考慮將它們緩存在字典中。 –
「不成熟的優化是萬惡之源」 - Donald Knuth –