手动订购一个列表C#

本文关键字:一个 列表 | 更新日期: 2023-09-27 18:23:50

我有一个包含成分名称和相应值的成分列表。我想根据预先定义的顺序对其进行排序。

 List<Ingredients> frmltnIngredientsList = new List<Ingredients>

该列表可以有多达10条记录。前四条记录应按以下顺序排列:

  • 蛋白质
  • 纤维
  • 灰烬

其余的可以是任何顺序的

手动订购一个列表C#

您可以这样做:

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());