我有列表,我想循环并按固定名称排序。如果说我的列表中包含项目,
List[0] = "Banana";
List[1] = "Orange";
List[2] = "Apple";
List[3] = "Olive";
然后我想让橙色始终在顶部。 所以我的订单将是 Orange => Banana => Mango => Olive。
我只是不知道如何以自定义方式对其进行排序。
我尝试使用
list = list.OrderBy(x => x.Name).toList();
但这会使橄榄油位于顶部。 有什么方法可以对此进行排序?有什么建议吗?
更新 如果列表中没有橙色,那么我不需要任何排序。
答案 0 :(得分:5)
list = list.OrderBy(x => x.Name != "Orange").ToList();
这会将“Orange”项目移到列表顶部,因为键选择器对这些项目的值为false
。对于其他项目,它将是true
。
您的字符串示例相同:
List.OrderBy(x => x != "Orange")
给予
Orange // false
Banana // true
Apple // true
Olive // true
答案 1 :(得分:1)
假设输入列表是string
的列表,以下将把所有“橙色”放在开头:
var fruits = new List<string> {
"Banana",
"Orange",
"Apple",
"Olive"
};
const string Orange = "Orange";
for (int i = 0; i < fruits.RemoveAll(fr => fr == Orange); i++) {
fruits.Insert(0, Orange);
}
Console.WriteLine(string.Join(", ", fruits));
这要求Orange
s是可互换的value / valuelike对象。
答案 2 :(得分:0)
尝试将enum
用于水果,并根据您的自定义将值指定给enums
。
public enum Fruits
{
Orange = 1,
Banana = 2,
Mango = 3,
Olive = 4
}
static void Main(string[] args)
{
Fruits[] List = new Fruits[4];
List[0] = Fruits.Banana;
List[1] = Fruits.Orange;
List[2] = Fruits.Mango;
List[3] = Fruits.Olive;
var sortedList = List.OrderBy(x => x);
foreach (var item in sortedList)
{
Console.WriteLine(item.ToString());
}
}
答案 3 :(得分:0)
创建您的列表,检查它是否包含“Orange”,如果它确实删除了该项目(不是基于Index
以便它可以在列表中的任何位置),那么在开始时再次插入“Orange”列表。
List<string> myList = new List<string>();
myList.Add("Banana");
myList.Add("Orange");
myList.Add("Apple");
myList.Add("Olive");
if (myList.Contains("Orange"))
{
myList.Remove("Orange");
myList.Insert(0,"Orange");
}
假设您的“Orange”是具有属性的对象,您可能希望更改上述内容以创建该对象类型的新单个内容,其具有与原始属性相同的所有属性(有效object
= {{1 }})。