按降序对泛型列表进行排序,删除值并按不同属性按升序对其进行排序,会产生意外的列表

本文关键字:排序 列表 升序 意外 泛型 降序 删除 属性 | 更新日期: 2023-09-27 17:59:53

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

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的值错误。我纠正了它,它起了作用。

按降序对泛型列表进行排序,删除值并按不同属性按升序对其进行排序,会产生意外的列表

Descending-从一个较大的值到一个较小的值进行排序。虽然您的示例显示,您需要将列表从小到大进行排序。

此外,只要您不需要修改原始列表,就可以使用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

我认为您混淆了升序和降序。试着扭转这种局面。

看起来你在两种排序中都是按升序排序的。升序是"最小值优先,值按顺序递增"。