使用2个字段对C#进行列表排序

本文关键字:列表 排序 2个 字段 使用 | 更新日期: 2023-09-27 18:28:54

我有一个自定义对象的列表。该对象包含1个字符串和2个小数。我想根据小数点后第二个字段降序排列列表,然后是第一个字段。

例如:

object 1 -> "a", 100, 10
object 2 -> "b", 300, 0
object 3 -> "c", 200, 200
object 4 -> "b", 400, 0

将被分类为对象3、对象1、对象4、对象2

如果这个问题已经得到回答,我很抱歉-请指给我那篇帖子,因为我找不到它

使用2个字段对C#进行列表排序

list.OrderByDescending(o => o.Field2)
    .ThenByDescending(o => o.Field1);

其他答案显示了构造IEnumerable<T>当枚举时,会按照您描述的顺序生成列表中的项目。可以说,它提供了列表的"视图",并且不会更改列表中项目的顺序。

如果你真的想对列表进行排序(即,在适当的位置更改列表,使其项目有序),你可以使用list<T>。排序方法如下:

list.Sort((x, y) =>
{
    int result = decimal.Compare(y.SecondDecimal, x.SecondDecimal);
    if (result == 0) 
        result = decimal.Compare(x.FirstDecimal, y.FirstDecimal);
    return result;
});
var ordered = objects.OrderByDescending(o => o.SecondDec)
                     .ThenByDescending(o => o.FirstDec);

然后枚举它或创建另一个集合,例如通过ToList

foreach(var obj in ordered)
{
    // ...
}

使用OrderByDescendingThenBy:

var sorted = items.OrderByDescending(item => item.Decimal2)
    ThenBy(item => item.Decimal1);