2017-05-24 73 views
-1

我有一個字典類型<int, list<int>>。我正在計算爲特定鍵重複的值實例的數量。使用LINQ獲取字典中的值的計數

我試圖

LINQquery = dict.SelectMany(keyvalues => keyvalues.Value.GroupBy(values => values).Select(values => new {key = keyvalues.Key, value = values.Key, count = values.Count(),votescasted = keyvalues.Value.Count})); 
resultList = LINQquery.ToList(); 

通過這個LINQ我創造了我的字典裏每一個獨特的價值一個新的列表條目。我結束了在我的列表中的多個關鍵條目。我怎樣才能修改我的查詢,以便我將有一個結果列表中有鍵,countvalue1,countofvalue2 ..,countofvalueN?

我輸入字典{500,{25,26,25,25}} 我的LINQ我得到一個列表 鍵= 500,值= 25,數= 3 鍵= 500,值= 26 ,count = 1

如何修改我的查詢,以便我的輸出列表可以是 key = 500,countof25 = 3,countof26 = 1。

+1

請提供[MCVE]顯示樣品投入和預期產出。它會使你更容易幫助你,而不是描述你正在做什麼。 –

+0

對不起,錯字..字典類型是int,列表{int} – derekspoll

+0

輸入字典{500,{25,26,25,25}輸出列表鍵= 500,countof25 = 3,countof26 = 1 – derekspoll

回答

0

我相信這會做你想要什麼:

var x = dict 
    .Select(d => new { Key = d.Key, 
         Counts = d.Value.GroupBy(v => v) 
             .Select(g => 
              new { Value = g.Key, 
                Count = g.Count() })}); 

那麼我們可以添加:

x.Select(i => $"Key = {i.Key}, " + 
    String.Join(", ", i.Counts.Select(c => $"countof{c.Value}={c.Count}"))).Dump(); 

,我們得到:

Key = 500, countof25=3, countof26=1 
+0

謝謝@ jamescurran – derekspoll