-3

特別なタイプのリストがあります:

List<Spitzen_Frequenz_und_Wert> spitzenliste = new List<Spitzen_Frequenz_und_Wert>();

//... 

public class Spitzen_Frequenz_und_Wert
{
    public double Frequenz;
    public double Wert;
}      

spitzenlisteに値を追加しています。これは次のようになります(例):

Frequenz;Wert
1;0.1
2;0.8
3;0.2
4;0.9
5;0.2
6;0.8

このリストをWertで降順にフィルタリングしたいので、この例では

Frequenz;Wert
4;0.9
2;0.8
6;0.8
5;0.2
3;0.2
1;0.1

次に、最初の5つのエントリのみを保持します

Frequenz;Wert
4;0.9
2;0.8
6;0.8
5;0.2
3;0.2

次に、Frequenzで昇順で並べ替えます

Frequenz;Wert
2;0.8
3;0.2
4;0.9
5;0.2
6;0.8

私のアプローチ

var NachGrößeSortiert = spitzenliste.OrderByDescending(Spitzen_Frequenz_und_Wert => Spitzen_Frequenz_und_Wert.Wert).ToList();
NachGrößeSortiert.RemoveRange(5, NachGrößeSortiert.Count - 5);
var NachFrequenzSortiert = NachGrößeSortiert.OrderBy(Spitzen_Frequenz_und_Wert => Spitzen_Frequenz_und_Wert.Frequenz);
foreach (var kklm in NachFrequenzSortiert)
{
    db(kklm.Frequenz + ";" + kklm.Wert);
}     

結果は次のようになります

Frequenz;Wert
1;0.1
1;0.8
1;0.2
...

なにが問題ですか?

編集:数式は機能しますが、spitzenlisteの値が間違っていました。私はそれを修正し、それは機能しました。

4

2 に答える 2

0

昇順と降順の言葉を混同していると思います。それを逆にしてみてください。

両方の順序で昇順で並べ替えているようです。昇順は「最初に最小で、値は順番に増加します」。

于 2013-02-17T23:57:22.203 に答える
0

降順-大きい値から小さい値に並べ替えます。あなたの例が示している間、あなたはリストを小さいものから大きいものへとソートする必要があることを示しています。

また、元のリストを変更する必要がなくなるとすぐにTake、同じタスクに使用できます。

var result = spitzenliste.OrderBy(s=>s.Wert)
                         .Take(5)
                         .OrderBy(s=>s.Frequenz)

上記の例では、出力が生成されます(Wert= 0.9はここでは省略されています)。

1:  0,1
2:  0,8
3:  0,2
5:  0,2
6:  0,8

を使用するOrderByDescending(s=>s.Wert)と、

2:  0,8
3:  0,2
4:  0,9
5:  0,2
6:  0,8

Wert=0.1はここでは省略されています

于 2013-02-18T00:01:42.753 に答える