使用2个字段列出排序C#
我有一个自定义对象的列表。该对象包含1个字符串和2个小数。我想根据第二个十进制字段降序然后第一个十进制字段对列表进行排序 例如:使用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
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;
});