C# список объектов, как получить сумму свойства
у меня есть список объектов. Одним из свойств отдельной записи объекта является сумма. Как я могу получить сумму суммы?
Если мой список был типа double я могу быть в состоянии сделать что-то вроде этого:
double total = myList.Sum();
однако я хочу что-то подобное этому, но этот синтаксис неверен.
double total = myList.amount.Sum();
Как я должен пойти о выполнении этого? Я хотел бы использовать функцию Sum, если это возможно, вместо того, чтобы перебирать и вычислять значение.
4 ответа:
и если вам нужно сделать это на элементах, которые соответствуют определенному условию...
double total = myList.Where(item => item.Name == "Eggs").Sum(item => item.Amount);
вот пример кода, который вы могли бы запустить, чтобы сделать такой тест:
var f = 10000000; var p = new int[f]; for(int i = 0; i < f; ++i) { p[i] = i % 2; } var time = DateTime.Now; p.Sum(); Console.WriteLine(DateTime.Now - time); int x = 0; time = DateTime.Now; foreach(var item in p){ x += item; } Console.WriteLine(DateTime.Now - time); x = 0; time = DateTime.Now; for(int i = 0, j = f; i < j; ++i){ x += p[i]; } Console.WriteLine(DateTime.Now - time);
тот же пример для сложного объекта:
void Main() { var f = 10000000; var p = new Test[f]; for(int i = 0; i < f; ++i) { p[i] = new Test(); p[i].Property = i % 2; } var time = DateTime.Now; p.Sum(k => k.Property); Console.WriteLine(DateTime.Now - time); int x = 0; time = DateTime.Now; foreach(var item in p){ x += item.Property; } Console.WriteLine(DateTime.Now - time); x = 0; time = DateTime.Now; for(int i = 0, j = f; i < j; ++i){ x += p[i].Property; } Console.WriteLine(DateTime.Now - time); } class Test { public int Property { get; set; } }
мои результаты с оптимизацией компилятора являются:
00:00:00.0570370 : Sum() 00:00:00.0250180 : Foreach() 00:00:00.0430272 : For(...)
и для второго теста:
00:00:00.1450955 : Sum() 00:00:00.0650430 : Foreach() 00:00:00.0690510 : For()
похоже, что LINQ обычно медленнее, чем foreach(... но что странно для меня, так это то, что foreach(...) кажется, быстрее, чем для цикла.