ホームページ >バックエンド開発 >C++ >LINQ OrderBy でカスタム IComparer を使用してリストを並べ替える方法

LINQ OrderBy でカスタム IComparer を使用してリストを並べ替える方法

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 を活用する方法を検討します。

提示されたシナリオには、「200906/1」という形式の InvoiceNumber プロパティを持つオブジェクトを含む汎用リストが含まれます。目標は、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 MyComparer:

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

最後に、ソートされたリストが確実に反映されるようにメソッドが変更されました。バインドされたリストでは、更新された項目コレクションを Items プロパティに割り当てる必要があります:

this.Items = items;

以上がLINQ OrderBy でカスタム IComparer を使用してリストを並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。