C#确定字典中的值

时间:2015-05-09 16:48:17

标签: c# dictionary

我有一个字典first<string, double>,其中双值介于0到1之间,我想创建另一个只需要10个值的字典,但是那些距离最远的字典是0.5。首先,我正在考虑制作字典asc / desc,但如果这些值在desc中为10 x 0.9,那么该怎么办?按照asc顺序,那么我只想得到更高的值,因为0.45从0.5开始只有0.05而0.9是距离中心0.4。

在字典中是否有任何方法可以执行此操作,或者我需要在循环中编写代码:

abs(first.Value - 0.5)然后将此值与相同的键添加到新词典中并使用.Take(10)?

2 个答案:

答案 0 :(得分:3)

var second = first.OrderByDescending(kvp => Math.Abs(kvp.Value - 0.5))
                  .Take(10)
                  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

答案 1 :(得分:1)

Dictionary<string, double> firstDic = new Dictionary<string, double>();
// fill

Dictionary<string, double> secondDic = (from e in firstDic
                                        let distance = Math.Abs(e.Value - 0.5)
                                        orderby distance descending
                                        select e).Take(10).ToDictionary(e => e.Key, e => e.Value);