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

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

Mary-Kate Olsen
發布: 2025-01-03 09:49:40
原創
695 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板