我有一个字典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)?
答案 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);