【问题标题】:How can I sort List<T> based on properties of T?如何根据 T 的属性对 List<T> 进行排序?
【发布时间】:2009-03-03 05:20:22
【问题描述】:

我的代码如下所示:

Collection<NameValueCollection> optionInfoCollection = ....
List<NameValueCollection> optionInfoList = new List<NameValueCollection>();
optionInfoList = optionInfoCollection.ToList();

if(_isAlphabeticalSoting)
   Sort optionInfoList

我尝试了 optionInfoList.Sort() 但它不起作用。

【问题讨论】:

    标签: c# sorting generic-list


    【解决方案1】:

    使用 sort 方法和 lambda 表达式,真的很简单。

    myList.Sort((a, b) => String.Compare(a.Name, b.Name))
    

    上面的例子展示了如何按照你的对象类型的 Name 属性排序,假设 Name 是字符串类型。

    【讨论】:

    • 你可以只使用string.Compare(a.Name, b.Name),这样安全吗?
    • 谢谢!每天学习新东西...我会编辑答案。
    【解决方案2】:

    如果你只是想让Sort() 工作,那么你需要在类中实现IComparableIComparable&lt;T&gt;

    如果您不介意创建一个 列表,您可以使用OrderBy/ToList LINQ 扩展方法。如果你想用更简单的语法对现有列表进行排序,你可以添加一些扩展方法,启用:

    list.Sort(item => item.Name);
    

    例如:

    public static void Sort<TSource, TValue>(
        this List<TSource> source,
        Func<TSource, TValue> selector)
    {
        var comparer = Comparer<TValue>.Default;
        source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
    }
    public  static void SortDescending<TSource, TValue>(
        this List<TSource> source,
        Func<TSource, TValue> selector)
    {
        var comparer = Comparer<TValue>.Default;
        source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
    }
    

    【讨论】:

    【解决方案3】:
    public class Person  {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    List<Person> people = new List<Person>();
    
    people.Sort(
        delegate(Person x, Person y) {
            if (x == null) {
                if (y == null) { return 0; }
                return -1;
            }
            if (y == null) { return 0; }
            return x.FirstName.CompareTo(y.FirstName);
        }
    );
    

    【讨论】:

      【解决方案4】:

      您需要设置一个比较器,告诉 Sort() 如何排列项目。

      查看List.Sort Method (IComparer) 了解如何执行此操作的示例...

      【讨论】:

        猜你喜欢
        • 2019-07-02
        • 2020-11-18
        • 1970-01-01
        • 2020-08-03
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多