首页 >后端开发 >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方法被修改为利用 MyComparer:

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

最后,确保排序list 反映在绑定列表中,更新的 items 集合必须分配给 Items 属性:

this.Items = items;

以上是如何使用自定义 IComparer 和 LINQ OrderBy 对列表进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn