2

我有列表,我想循环并按固定名称对其进行排序。如果说我的清单有项目,

List[0] = "Banana";
List[1] = "Orange";
List[2] = "Apple";
List[3] = "Olive";

然后我想让橙色总是在顶部。所以我的订单将是橙色=>香蕉=>芒果=>橄榄。

我只是不知道如何以自定义方式对其进行排序。

我尝试使用

list = list.OrderBy(x => x.Name).toList();  

但这使橄榄油位于顶部。有什么办法可以解决这个问题?有什么建议么?

更新 如果列表中不存在橙色,那么我不需要任何排序。

4

4 回答 4

5
list = list.OrderBy(x => x.Name != "Orange").ToList();

这会将“橙色”项目移动到列表顶部,因为键选择器将对false这些项目具有价值。对于其他项目,它将是true


您的字符串示例也一样:

List.OrderBy(x => x != "Orange")

Orange // false
Banana // true
Apple  // true
Olive  // true
于 2013-08-22T09:07:51.817 回答
1

假设输入列表是一个strings 的列表,下面会将所有“Orange”s 放在开头:

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

这要求Oranges 是可互换的值/类值对象。

于 2013-08-22T09:15:03.497 回答
0

创建您的列表,检查它是否包含“橙色”,如果它确实删除了该项目(不是基于Index它可能位于列表中的任何位置),然后在列表的开头再次插入“橙色”。

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");
}

假设您的“橙色”是一个具有属性的对象,您希望更改以上内容以创建该对象类型的新单个实例,并具有与原始属性相同的所有属性(实际上object= object)。

于 2013-08-22T09:17:09.387 回答
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());
    }
}
于 2013-08-22T09:15:35.963 回答