【发布时间】:2020-08-19 21:20:45
【问题描述】:
我必须以这种方式对列表进行排序,所以我必须在变量中使用函数
Func<Elem, Elem, int> w = (elem1, elem2) => DateTime.Compare(elem1.Date, elem2.Date);
list.Sort(w);
如何将函数转换为比较器?
【问题讨论】:
-
列表是什么类?
标签: c# lambda-calculus
我必须以这种方式对列表进行排序,所以我必须在变量中使用函数
Func<Elem, Elem, int> w = (elem1, elem2) => DateTime.Compare(elem1.Date, elem2.Date);
list.Sort(w);
如何将函数转换为比较器?
【问题讨论】:
标签: c# lambda-calculus
您可以使用Comparison<Elem> 类或创建实现IComparer<Elem> 的类
list.Sort(new Comparison<Elem>((v1, v2) => DateTime.Compare(v1.Date, v2.Date)));
IComparer 实现
public class ElemComparer : IComparer<Elem>
{
public int Compare(Elem x, Elem y)
{
return DateTime.Compare(x.Date, y.Date);
}
}
使用 ElemComparer
list.Sort(new ElemComparer());
【讨论】:
DateTime.Compare 隐式转换为Comparison<DateTime>,因此您可以只使用list.Sort(DateTime.Compare)。
List<Elem>
对于您可以自行实现的任何类型:
List<object> list = new List<object>();
list.Sort((e1, e2) =>
{ // Do compensation based on e1 and e2, and return -1, 0, 1
return 0;
});
有些类型有默认的比较器,像这样:
List<DateTime> list = new List<DateTime>();
list.Sort(Comparer<DateTime>.Default);
或:
List<DateTime> list = new List<DateTime>();
list.Sort(DateTime.Compare);
【讨论】:
List<Elem> 列表进行排序