Mam listę obiektów. Jedną z właściwości pojedynczego wpisu obiektu jest kwota. Jak uzyskać sumę kwoty?
Jeśli moja lista była typu double, być może uda mi się zrobić coś takiego:
double total = myList.Sum();
Jednak chcę coś podobnego, ale ta składnia jest niepoprawna.
double total = myList.amount.Sum();
Jak mam się do tego zabrać? Chciałbym, jeśli to możliwe, użyć funkcji Sum zamiast przechodzenia po pętli i obliczania wartości.
A jeśli musisz to zrobić na przedmiotach, które spełniają określony warunek ...
źródło
Inna alternatywa:
źródło
.Select(i => i.Moons).Sum()
ciebie możesz użyć.Sum(i => i.Moons)
Oto przykładowy kod, który możesz uruchomić, aby wykonać taki test:
Ten sam przykład dla złożonego obiektu to:
Moje wyniki z wyłączoną optymalizacją kompilatora to:
a dla drugiego testu to:
wygląda na to, że LINQ jest generalnie wolniejszy niż foreach (...), ale dla mnie dziwne jest to, że foreach (...) wydaje się być szybsze niż pętla for.
źródło
Stopwatch
wSystem.Diagnostics
jak to jest rejestrator czasu o wysokiej wydajności. (Przy okazji nie przegłosowałem)DateTime.Now
do pomiaru. Ma fatalną wydajność, ponieważ zawsze zwraca czas lokalny.DateTime.UtcNow
jest szybszy; jednak nadal nie używa tak wysokiej rozdzielczości jakStopwatch
klasa.