Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用2个字段列出排序C#_C#_List_Sorting_Lambda - Fatal编程技术网

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

使用2个字段列出排序C#,c#,list,sorting,lambda,C#,List,Sorting,Lambda,我有一个自定义对象的列表。该对象包含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 我很抱歉,如果这个问题已经得到了回答-请告诉我,因为我找不到它 var ordered = object

我有一个自定义对象的列表。该对象包含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

我很抱歉,如果这个问题已经得到了回答-请告诉我,因为我找不到它

var ordered = objects.OrderByDescending(o => o.SecondDec)
                     .ThenByDescending(o => o.FirstDec);
然后枚举它或创建另一个集合,例如通过
ToList

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

使用降序法
OrderByDescending
,然后使用
ThenBy

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

其他答案显示了一种构建IEnumerable的好方法,当枚举时,它会按照您描述的顺序生成列表中的项目。可以说,它提供了列表的“视图”,并且不会更改列表中项目的顺序

如果您确实希望对列表进行排序(即,更改列表以使其项目按顺序排列),您可以使用以下命令:

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

您应该包括
对象的
属性名称
,这样会更好。否则我猜回答者会
假设你有…
或者甚至什么都不假设。这已经得到了回答和回答。
list.Sort((x, y) =>
{
    int result = decimal.Compare(y.SecondDecimal, x.SecondDecimal);
    if (result == 0) 
        result = decimal.Compare(x.FirstDecimal, y.FirstDecimal);
    return result;
});