手动订购一个列表C#
本文关键字:一个 列表 | 更新日期: 2023-09-27 18:23:50
我有一个包含成分名称和相应值的成分列表。我想根据预先定义的顺序对其进行排序。
List<Ingredients> frmltnIngredientsList = new List<Ingredients>
该列表可以有多达10条记录。前四条记录应按以下顺序排列:
- 蛋白质
- 油
- 纤维
- 灰烬
其余的可以是任何顺序的
您可以这样做:
frmltnIngredientsList.OrderBy(item =>
item.Name == "Protein" ? 1 :
item.Name == "oil" ? 2 :
item.Name == "Fibre" ? 3 :
item.Name == "Ash" ? 4 :
5);
OrderBy
调用将产生一个IOrderedEnumerable<Ingredient>
。所以你需要把它分配给一个变量,
var orderedList = frmltnIngredientsList.OrderBy(item => ...);
或者调用ToList()
将其分配给List<Ingredient>
类型的变量:
frmltnIngredientsList = frmltnIngredientsList.OrderBy(item => ...).ToList();
当然可以稍微整理一下。要么你可以在Ingredient
列表上有一个SortOrder
属性,然后只运行.OrderBy(x => x.SortOrder)
,要么你至少可以把逻辑移到视线之外:
public static class IngredientExtensions
{
public static int GetSortNumber(this Ingredient item) {
return item.Name == "Protein" ? 1 :
item.Name == "oil" ? 2 :
item.Name == "Fibre" ? 3 :
item.Name == "Ash" ? 4 :
5;
}
}
...
var orderedList = frmltnIngredientsList.OrderBy(item => item.GetSortNumber());