Mon*_*RPG 2 c# linq select key-value
现在问题非常困难.现在这是我的主要清单
List<List<KeyValuePair<string, double>>> dblWordFreqByCluster = new List<List<KeyValuePair<string, double>>>();
Run Code Online (Sandbox Code Playgroud)
所以让我们给出示例列表
(house,40),(home,20),(monitor,40)
(home,10),(work,60),(monitor,30)
(school,70),(home,10),(word,20)
Run Code Online (Sandbox Code Playgroud)
所以每一行都是a,List<KeyValuePair<string, double>>
并且有一个包含所有这些行的最大列表.
我想要做的是选择每个单词的值,它们的总和,然后在整个列表中划分单词计数.因此,在此修改后,列表将成为以下内容
(house,40),(home,40/3),(monitor,70/2)
(home,40/3),(work,60),(monitor,70/2)
(school,70),(home,40/3),(word,20)
Run Code Online (Sandbox Code Playgroud)
这意味着获取每个键的平均值并更新每个键值.
C#4.0 WPF
Linq非常容易.首先,计算每个密钥的平均值:
var averages =
(from list in dblWordFreqByCluster
from kvp in list
group kvp by kvp.Key into g
select new
{
Key = g.Key,
Avg = g.Average(kvp => kvp.Value)
}).ToDictionary(x => x.Key, x => x.Avg);
Run Code Online (Sandbox Code Playgroud)
然后更新列表.由于KeyValuePair
是不可变的,您需要用新的项目替换项目:
foreach (var list in dblWordFreqByCluster)
{
for (int i = 0; i < list.Count; i++)
{
string key = list[i].Key;
list[i] = new KeyValuePair<string, double>(key, averages[key]);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4993 次 |
最近记录: |