【问题标题】:How can i custom sort dictionary by value base near zero via c#如何通过c#按接近零的值基数自定义排序字典
【发布时间】:2017-07-20 08:08:28
【问题描述】:

我有一个Dictionary<int, double>,我想对其进行自定义排序。但是排序是不是有点不同。

例如这里是代码:

Dictionary<int, double> dicZeroPeriods = new Dictionary<int, double>();
dicZeroPeriods.Add (80,-3.5);
dicZeroPeriods.Add (90,-2.4);
dicZeroPeriods.Add (50,4.2);
dicZeroPeriods.Add (65,1.2);

那么我怎样才能自定义排序dicZeroPeriods 按接近零的值基数。我的意思是结果应该是:

65,1.2
90,-2.4
80,-3.5
50,4.2

【问题讨论】:

  • Dictionary 没有排序方法,您可能需要使用SortedDictionary 检查此帖子How to use custom IComparer for SortedDictionary?,或按排序顺序重新创建字典
  • 我不能使用 SortedDictionary,因为我有一些相同的条目。

标签: c# sorting dictionary


【解决方案1】:

只需将OrderByMath.Abs 函数一起使用。给你:

dicZeroPeriods = dicZeroPeriods.OrderBy(x => Math.Abs(x.Value))
            .ToDictionary(x => x.Key, x => x.Value);

【讨论】:

  • 感谢您的回答。它工作得很清楚。如果没有 LINQ,我怎么能做到这一点?
  • @lotomax 我可以说如何。带着很多痛苦。手动编写循环,实现其中一种排序算法。
  • 谢谢,我需要它,因为我想在 JAVA 中使用它。而且java中没有LINQ排序。
【解决方案2】:

使用Math.Abs() 按绝对值对字典元素进行排序。 Math.Abs​​(1.2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2016-08-09
    • 1970-01-01
    • 2013-05-21
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多