对通用列表进行降序排序,删除值并按不同属性按升序排序会导致意外列表

时间:2013-02-17 23:52:32

标签: c# linq list sorting

我有一个特殊类型的列表:

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有错误的值。我纠正了它并且有效。

2 个答案:

答案 0 :(得分:0)

我认为你混淆了上升和下降的词汇。尝试颠倒它。

看起来你按两种顺序按升序排序。升序是“最小的,价值通过序列增加”。

答案 1 :(得分: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