使用2个字段列出C#排序

Vij*_*y V 5 c# sorting lambda list

我有一个自定义对象列表.该对象包含1个字符串和2个小数.我想基于第二个十进制字段然后第一个十进制字段对列表进行排序.

例如:

object 1 -> "a", 100, 10
object 2 -> "b", 300, 0
object 3 -> "c", 200, 200
object 4 -> "b", 400, 0
Run Code Online (Sandbox Code Playgroud)

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

如果这已经得到回答,我很抱歉 - 请指出我找不到的帖子

D S*_*ley 9

list.OrderByDescending(o => o.Field2)
    .ThenByDescending(o => o.Field1);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

var ordered = objects.OrderByDescending(o => o.SecondDec)
                     .ThenByDescending(o => o.FirstDec);
Run Code Online (Sandbox Code Playgroud)

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

foreach(var obj in ordered)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 5

其他答案显示了构建IEnumerable <T>的好方法,当枚举时,它会按照您描述的顺序生成列表中的项目.它提供了列表的"视图",可以这么说,并且不会改变列表本身中项目的顺序.

如果您确实要对列表进行排序(即,就地更改列表以使其项目按顺序排列),则可以使用List <T> .Sort方法,如下所示:

list.Sort((x, y) =>
{
    int result = decimal.Compare(y.SecondDecimal, x.SecondDecimal);
    if (result == 0) 
        result = decimal.Compare(x.FirstDecimal, y.FirstDecimal);
    return result;
});
Run Code Online (Sandbox Code Playgroud)