在C#中对列表进行排序的方法

这个问题在这里已经有了答案:

  • 如何按对象中的属性排序列表<T> 19答案

  • 这绝对不是你应该手动做的事情(除非你正在训练你的算法技能:))。 它会使你的代码更加复杂和难以维护。

    刚刚说:

    using System.Linq;
    

    并做到这一点:

    var sorted = list.OrderByDescending(x => x.PersonalNumber).ToList();
    

    你不需要成为Linq ninja来使用它。 我也强烈建议开始使用它。 我认为你可以认同它很容易阅读,而且很明显它在做什么。

    嗯,如果你想排序升序,只需使用.OrderBy而不是.OrderByDescending。


    如果你想排序清单,只需把Sort

    list.Sort((x, y) => x.PersonalNumber.CompareTo(y.PersonalNumber));
    

    要按降序排序,请添加-

    list.Sort((x, y) => -x.PersonalNumber.CompareTo(y.PersonalNumber));
    

    对于大多数场景,您应该使用其中一种内置功能进行排序,例如List<T>.SortEnumerable.OrderBy 。 我假设你想保留你自己的排序算法实现。

    您可以引入一个键选择器函数作为您的方法的第二个参数:

    public static void SelectionSort<TSource, TKey>(
        List<TSource> list, 
        Func<TSource, TKey> keySelector) 
    {
        // With this method the list is sorted in ascending order. 
        //posMin is short for position of min
        int posMin;
        for (int i = 0; i < list.Count - 1; i++) {
            posMin = i;//Set posMin to the current index of array
            for (int j = i + 1; j < list.Count; j++) {
                if (keySelector(list[j]) < keySelector(list[posMin])) {
                    //posMin will keep track of the index that min is in, this is needed when a swap happens
                    posMin = j;
                }
            }
    
            //if pos_min no longer equals i than a smaller value must have been found, so a swap must occur
            TSource temp;
            if (posMin != i) {
                temp = list[i];
                list[i] = list[posMin];
                list[posMin] = temp;
            }
        }
    }
    

    然后,您将使用lambda表达式来使用它:

    SelectionSort(persons, (Person p) => p.PersonalNumber);
    
    链接地址: http://www.djcxy.com/p/70949.html

    上一篇: Method for sorting a list in C#

    下一篇: How To Sort a List<T>?