簡體   English   中英

C#對象列表,如何獲取屬性的總和

[英]C# List of objects, how do I get the sum of a property

我有一個對象列表。 單個對象條目的一個屬性是數量。 我如何獲得金額的總和?

如果我的列表是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循環快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM