-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;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 回答