簡體   English   中英

C# 訂單列表由兩個不同的東西

[英]C# order list by two different things

假設我有以下列表:

var someList = new List<SomeObject>();

其中有以下條目:

SomeObject.Field

Apple
Orange
FruitBowl_Outside
Banana
Grape
FruitBowl_Inside

我想對這個列表進行排序,以便FruitBowl條目 go 在底部,並且受此限制,所有內容都是字母順序。

用順序的話:

SomeObject.Field

Apple
Banana
Grape
Orange
FruitBowl_Inside
FruitBowl_Outside

您可以使用OrderBy()ThenBy()方法:

var orderedList = someList.OrderBy(obj => obj.Field.StartsWith("FruitBowl_"))
                          .ThenBy(obj => obj.Field);

您可以創建自己的 IComparer 並將其傳遞給 List.Sort 方法。 我會盡快發布代碼。

        List<Record> list = new List<Record>();
        list.Add(new Record("Apple"));
         list.Add(new Record("Orange"));
        list.Add(new Record("FruitBowl_Outside"));
        list.Add(new Record("Banana"));
        list.Add(new Record("Grape"));
        list.Add(new Record("FruitBowl_Inside"));
        list.Sort(new RecordComparer());



public class Record {
    public Record(string data) {
        this.data = data;
    }
    private string data;
    public string Data {
        get { return data; }
        set {
            data = value;
        }
    }
}


public class RecordComparer : IComparer<Record> {
    public int Compare(Record x, Record y) {
        if(x.Data.Contains("FruitBowl") && !y.Data.Contains("FruitBowl"))
            return 1;
        if(y.Data.Contains("FruitBowl") && !x.Data.Contains("FruitBowl"))
            return -1;
        return x.Data.CompareTo(y.Data);
    }
}

怎么樣:

someList.OrderBy(a => a.Field.StartsWith("FruitBowl")).ThenBy(a => a.Field);

您可以將 List.Sort() 與自定義比較方法一起使用 - 請參見此處

這個怎么樣↓

someList.Sort(new Comparison<string>((x, y) => { return x.StartsWith("FruitBowl") ^ y.StartsWith("FruitBowl") ? (x.StartsWith("FruitBowl") ? 1 : -1) : x.CompareTo(y); }));

並與樣品↓

static void Main(string[] args)
    {
        List<string> lstData = new List<string>()
        {
            "Apple",
            "Orange",
            "FruitBowl_Outside",
            "Banana",
            "Grape",
            "FruitBowl_Inside"
        };


        lstData.Sort(new Comparison<string>((x, y) => { return x.StartsWith("FruitBowl") ^ y.StartsWith("FruitBowl") ? (x.StartsWith("FruitBowl") ? 1 : -1) : x.CompareTo(y); }));


        foreach (string data in lstData)
            Console.WriteLine(data);

        Console.ReadLine();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM