我有一个特殊类型的列表:
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有错误的值。我纠正了它并且有效。
答案 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