我有一份配料清單,配料名稱和相應的值。我想根據預先定義的順序進行排序。手動訂購清單C#?
List<Ingredients> frmltnIngredientsList = new List<Ingredients>
該列表最多可以有10條記錄。前四個記錄應該是順序:
- 蛋白
- 油
- 光纖
- 灰
和他們其餘的人可以在任何順序
我有一份配料清單,配料名稱和相應的值。我想根據預先定義的順序進行排序。手動訂購清單C#?
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();
它當然也可以收拾一點點。要麼你可以有一個SortOrder
屬性您Ingredient
名單上,只需運行.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());
嗨大衛,我dint得到這個工作 – sony 2012-02-07 12:15:25
'OrderBy'不這樣工作:它使用惰性執行,所以它不會做任何事情,直到您訪問您的數據。使用'frmltnIngredientsList' ='frmltnIngredientsList.OrderBy(item => item.GetSortNumber())。ToList();'代替。 – ken2k 2012-02-07 12:18:53
啊,是的,我只是想說明如何調用這個方法,但我現在意識到我的代碼似乎意味着該方法會改變源代碼。將進行更新以避免更多混淆。 – 2012-02-07 12:28:01
您與灰做飯?這對我來說是新的! :) – Benjol 2012-02-07 11:48:23