按降序对泛型列表进行排序,删除值并按不同属性按升序对其进行排序,会产生意外的列表
本文关键字:排序 列表 升序 意外 泛型 降序 删除 属性 | 更新日期: 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
我认为您混淆了升序和降序。试着扭转这种局面。
看起来你在两种排序中都是按升序排序的。升序是"最小值优先,值按顺序递增"。