2017-03-01 5 views
3

Dictionary<int, double>私はカスタムソートしたいと思います。しかし、それは少し異なる仕分けですか?例えばどのように私はC#で

はここのコードです:

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 
+0

'Dictionary'はソートメソッドがありません。あなたは' SortedDictionary'を使用する必要があるかもしれません[SortedDictionaryのカスタムIComparerの使い方?](http://stackoverflow.com/questions/2720009/how-to -use-custom-icomparer-for-sorteddictionary)、または辞書をソート順で再作成する – bansi

+0

同じエントリがあるのでSortedDictionaryを使用できません。 – lotomax

答えて

4

だけMath.Abs機能をOrderByを使用します。私は結果がでなければなりません意味します。ここに行く:

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

あなたの答えをありがとう。それははっきりと働いています。そして、私はLINQなしでそれをどうやってすることができますか? – lotomax

+0

@lotomaxどのように言うことができます。痛みが多い手動でループを作成し、ソートアルゴリズムの1つを実現する。 –

+0

ありがとう、私はJAVAでこれを使用したいので、私はそれが必要です。そして、JavaにはLINQソートはありません。 – lotomax

0

Math.Abs()を使用して、絶対値で辞書要素をソートします。 Math.Abs​​(1.2)< Math.Abs​​(-3.5)など。