用于计算.NET中列表最小值/最大值的最短代码

rip*_*234 10 .net c# algorithm

我喜欢类似的东西

int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
Run Code Online (Sandbox Code Playgroud)

在.NET中有没有内置的方法来做到这一点?

Nic*_*uso 20

试着看看这些:

马克斯

只要你的类实现IComparable,你所要做的就是:

List<MyClass> list = new List();
//add whatever you need to add

MyClass min = list.Min();
MyClass max = list.Max();
Run Code Online (Sandbox Code Playgroud)

  • 因为它是一个很好的(我应该移动到3.5 :) (3认同)
  • 如果您仍然使用.NET 2.0,那么这又如何成为您接受的答案? (2认同)

Rya*_*ndy 10

好吧,如果你不能使用.NET 3.5,你总是可以对列表进行排序,然后返回列表[0].它可能不是最快的方式,但它可能是最短的代码,特别是如果你的类已经实现了IComparable.

List<SomeClass> list = new List<SomeClass>();
// populate the list
// assume that SomeClass implements IComparable
list.Sort();
return list[0];               // min, or
return list[list.Count - 1];  // max
Run Code Online (Sandbox Code Playgroud)

当然,这也假设如果您有多个最小或最大的项目,则返回哪个项目无关紧要.

如果您的类没有实现IComparable,您可以传入一个匿名委托,如下所示:

list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); });
Run Code Online (Sandbox Code Playgroud)