繁体   English   中英

如何 select 列表中的键值对列表<list<keyvaluepair<string,double> >> 并修改它们的值? C# </list<keyvaluepair<string,double>

[英]How to select list of keyvaluepairs in List<List<keyvaluepair<string,double>>> and modify their values ? C#

现在这个问题很难。 现在这是我的主要清单

List<List<KeyValuePair<string, double>>> dblWordFreqByCluster = new List<List<KeyValuePair<string, double>>>();

所以让我们给出示例列表

(house,40),(home,20),(monitor,40)
(home,10),(work,60),(monitor,30)
(school,70),(home,10),(word,20)

所以每一行都是一个List<KeyValuePair<string, double>>并且有一个包含所有这些行的最大列表。

我想要做的是 select 每个单词值,它们的总和,然后在整个列表中除以单词计数。 所以在这个修改之后列表将变成以下

(house,40),(home,40/3),(monitor,70/2)
(home,40/3),(work,60),(monitor,70/2)
(school,70),(home,40/3),(word,20)

这意味着获取每个键的平均值并更新每个键值。

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);

然后更新列表。 由于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]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM