在C#中对列表进行排序的方法
这个问题在这里已经有了答案:
这绝对不是你应该手动做的事情(除非你正在训练你的算法技能:))。 它会使你的代码更加复杂和难以维护。
刚刚说:
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>.Sort
或Enumerable.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