C#中Dictionary<string, List<double>>的平均值计算方法
字典中List的平均值计算方法
你的代码报错是因为:Where筛选后得到的是包含键值对的序列,直接对x.Value(即List<double>)调用Average不合法——Linq的Average需要接收数值类型的序列,而非列表本身。另外,字典的键是唯一的,用Where做单键筛选效率很低,更推荐直接通过键查找。
正确写法示例
1. 推荐:直接通过键获取列表(高效且安全)
利用字典的TryGetValue方法,既能快速定位键对应的列表,又能避免键不存在时抛出异常:
Dictionary<string, List<double>> SignalValues = new Dictionary<string, List<double>>(); // 假设已向SignalValues添加数据 if (SignalValues.TryGetValue("Key", out var targetList)) { var dSignalAvg = targetList.Average(); // 在这里使用计算得到的平均值 }
2. Linq方式(单键场景)
如果非要用Linq,先通过FirstOrDefault拿到目标键值对,再对列表求平均,注意处理键不存在的情况:
var dSignalAvg = SignalValues .FirstOrDefault(x => x.Key == "Key") .Value? .Average() ?? 0.0; // 键不存在时返回0.0,可根据需求调整默认值
3. 多键场景:合并所有符合条件的列表求整体平均值
如果需要筛选多个键,把所有对应列表里的double合并后求平均,用SelectMany展开序列:
var overallAvg = SignalValues .Where(x => x.Key.StartsWith("KeyPrefix")) // 示例:筛选键以指定前缀开头的项 .SelectMany(x => x.Value) .Average();
内容的提问来源于stack exchange,提问作者Juan Antonio
相关产品推荐
相关产品推荐

