簡體   English   中英

c#linq,按索引求和不同的值

[英]c# linq, sum distinct values by index

我有多個具有多個值的列表,這些值可能具有相同的項目數,也可能不具有相同的數目。

這是一些代碼來幫助解釋...

    public static List<p> pList= new List<p>();
    public class p
    {
        public string name;
        public double sum;
        public List<double> ip;
    }

因此,我有“ p”類作為列表。.“ p”類中的某些名稱將相同,而有些不同。

我只需要對具有相同名稱的類“ p”按索引求和“ ip”中的值。

數據示例

name = a, sum = 10, ip = {2,2,2,2,2}    
name = a, sum = 10, ip = {0,0,5,5}    
name = a, sum = 5, ip = {0,0,5}    
name = b, sum = 20, ip = {0,20}    
name = b, sum = 10, ip = {10}    

結果..

name = a, sum = 25, ip = {2,2,12,7,2}    
name = b, sum = 30, ip = {10,20}    

以下是我已經編寫的代碼。

List<p> distinctmerge = pList
                         .GroupBy(t => t.name)
                         .Select(g => new p
                         {
                             name = g.Select(a => a.name).FirstOrDefault(),
                             sum = g.Sum(a => a.sum),
                             ip = new List<double>() { 1, 2, 3 }
                         }).ToList();

我不知道的部分在這里。

ip = new List<double>() { 1, 2, 3 }

您可以通過以下方式總結IP列表:

 ip = Enumerable.Range(0, g.Select(a => a.ip.Length).Max()).Select(idx => g.Select(a => a.ip.ElementAtOrDefault(idx)).Sum()).ToList() 

可以使用SelectManyGroupBy

        List<p> distinctmerge = pList
            .GroupBy(t => t.name)
            .Select(g => new p
            {
                name = g.Select(a => a.name).FirstOrDefault(),
                sum = g.Sum(a => a.sum),
                ip = g.SelectMany(a => a.ip.Select((e, i) => new { e, i }))
                      .GroupBy(a => a.i)
                      .OrderBy(a => a.Key)
                      .Select(a => a.Sum(e => e.e))
                      .ToList()
            }).ToList();

暫無
暫無

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

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