반응형
C # 객체 목록, 속성의 합계를 얻는 방법
개체 목록이 있습니다. 개별 객체 항목의 한 속성은 금액입니다. 금액의 합계는 어떻게 얻습니까?
내 목록이 double 유형 인 경우 다음과 같이 할 수 있습니다.
double total = myList.Sum();
그러나 이와 비슷한 것을 원하지만이 구문은 올바르지 않습니다.
double total = myList.amount.Sum();
이것을 달성하려면 어떻게해야합니까? 가능하면 반복하여 값을 계산하는 대신 Sum 함수를 사용하고 싶습니다.
using System.Linq;
...
double total = myList.Sum(item => item.Amount);
특정 조건과 일치하는 항목에서 해야하는 경우 ...
double total = myList.Where(item => item.Name == "Eggs").Sum(item => item.Amount);
다른 대안 :
myPlanetsList.Select(i => i.Moons).Sum();
이러한 테스트를하기 위해 실행할 수있는 예제 코드는 다음과 같습니다.
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 (...)가 for 루프보다 빠르다는 것입니다.
반응형
'IT박스' 카테고리의 다른 글
PHP를 사용하여 한 디렉토리에서 다른 디렉토리로 파일을 복사하는 방법은 무엇입니까? (0) | 2020.06.20 |
---|---|
CSS 줄임표가 표 셀에서 작동하지 않는 이유는 무엇입니까? (0) | 2020.06.20 |
다른 div 내에서 부동 div 센터링 (0) | 2020.06.20 |
WPF 앱 내에서 특정 디렉토리로 Windows 탐색기를 열려면 어떻게해야합니까? (0) | 2020.06.20 |
jQuery : 특정 ID를 제외하고 주어진 클래스의 모든 요소를 선택하십시오. (0) | 2020.06.20 |