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

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

Linda Hamilton
發布: 2025-01-01 04:11:10
原創
328 人瀏覽過

How to Correctly Sort a List Using a Custom IComparer with Linq OrderBy?

使用自訂IComparer使用Linq OrderBy

問題

您有一個通用List;其中MyClass 包含一個InvoiceNumber 屬性,其值類似200906/1。您想要使用自訂 IComparer以特定順序對清單進行排序。但是,使用自訂比較器時,清單的排序仍然不正確。

回答

您的程式碼中存在兩個問題:

  1. 您提供的自訂比較器無法正確對數字進行排序。您應該將 InvoiceNumber 值轉換為數字並根據這些數字進行排序。
  2. 您沒有更新 BindingList;與已排序的項目。對清單進行排序後,您需要將排序後的清單指派給 BindingList 的 Items 屬性。

這是修正後的自訂比較器:

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 String.Compare(stringA.ToString(), 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]));
        }
    }

}
登入後複製

這裡是更新 BindingList 的修正程式碼:

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(x => property.GetValue(x), comparer).ToList();
    break;
default:
    // Handle descending sort direction here
    break;
}

this.Items = items;
登入後複製

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

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