首頁 >後端開發 >C++ >如何使用自訂 IComparer 和 LINQ OrderBy 對清單進行排序?

如何使用自訂 IComparer 和 LINQ OrderBy 對清單進行排序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-03 09:49:40665瀏覽

How to Sort a List Using a Custom IComparer with LINQ OrderBy?

使用自訂IComparer在Linq OrderBy

本文中,我們將探討如何利用自訂IComparer與LINQ OrderBy 介面以實現特定的排序行為。

所呈現的場景涉及一個通用列表,其中包含 InvoiceNumber 屬性格式為「200906/1」的物件。目標是根據考慮 InvoiceNumber 屬性內的數值的自訂排序邏輯對此清單進行排序。

最初,自訂 IComparer實作了名為 MyComparer 的類別。然而,排序結果並不令人滿意,因為它是根據預設的文字順序排序的,而不是預期的數字比較。

更正後的MyComparer 實作如下:

public class MyComparer : IComparer<Object>
{
    public int Compare(Object stringA, Object stringB)
    {
        string[] valueA = stringA.ToString().Split('/');
        string[] valueB = stringB.ToString().Split('/');

        if (valueA.Length != 2 || valueB.Length != 2)
        {
            return stringA.ToString().CompareTo(stringB.ToString());
        }

        // Note: do error checking and consider i18n issues too :)
        if (valueA[0] == valueB[0]) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0]));
        }
    }
}

ApplySortCore方法被修改為利用Mylistarer:

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(
              x => property.GetValue(x), comparer).ToList();
    break;

最後,確保排序列表中反映在綁定列表中,更新的items 集合必須指派給Items 屬性:

this.Items = items;

以上是如何使用自訂 IComparer 和 LINQ OrderBy 對清單進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn