【问题标题】:C# Determining value in dictionaryC#确定字典中的值
【发布时间】:2015-07-20 11:26:06
【问题描述】:

我有一个字典first<string, double>,其双值范围在 0 到 1 之间,我想制作另一个只包含 10 个值的字典,但那些值与 0.5 最远。首先,我正在考虑制作字典 asc/desc,但如果这些值在 desc 中为 10 x 0.9,大约为 0.45,该怎么办。按升序排列,那么我只想获得更高的值,因为 0.45 距离 0.5 仅 0.05,而 0.9 距离中心 0.4。

字典中有什么方法可以做到这一点,或者我需要像这样循环编码:

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

【问题讨论】:

  • 我认为您可以使用 LINQ 浏览字典,按距离排序,然后取 10 使其最简单。字典本身对此没有任何帮助。

标签: c# dictionary


【解决方案1】:
var second = first.OrderByDescending(kvp => Math.Abs(kvp.Value - 0.5))
                  .Take(10)
                  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

【讨论】:

    【解决方案2】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多