반응형
C# 객체 목록, 속성의 합계를 가져오는 방법
저는 물건 목록을 가지고 있습니다.개별 개체 항목의 속성 중 하나는 양입니다.금액의 합계를 어떻게 구합니까?
만약 내 목록이 이중 유형이었다면 나는 다음과 같은 일을 할 수 있었을 것입니다.
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는 일반적으로 각(...)에 비해 느린 것처럼 보이지만, 저에게 이상한 것은 각(...)에 대해 루프에 비해 더 빠른 것처럼 보인다는 것입니다.
언급URL : https://stackoverflow.com/questions/4351876/c-sharp-list-of-objects-how-do-i-get-the-sum-of-a-property
반응형
'sourcecode' 카테고리의 다른 글
정확히 어떻게 std::string_view가 conststd::string&보다 빠릅니까? (0) | 2023.05.29 |
---|---|
powershell 2.0 예외에 액세스하는 방법을 시도합니다. (0) | 2023.05.29 |
목록에서 임의 항목에 액세스하는 방법은 무엇입니까? (0) | 2023.05.24 |
자바스크립트를 사용하여 엑셀 파일을 내보내려면 어떻게 해야 합니까? (0) | 2023.05.24 |
MongoDB Community : 서비스를 로컬 또는 도메인 사용자로 설치하는 중 오류 발생 (0) | 2023.05.24 |