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

我喜欢类似的东西

int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);}); 

是否有内置的方法在.NET中执行此操作?

试着看看这些:

马克斯

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

 List list = new List(); //add whatever you need to add MyClass min = list.Min(); MyClass max = list.Max(); 

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

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

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

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

 list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); }); 

使用Linq你有Min()和Max()函数。

所以你可以做list.AsQueryable().Min();

你注意到“我还在2” – 你可能会想看看LINQBridge 。 这实际上是针对C#3.0和.NET 2.0,但是您应该可以将它与C#2.0和.NET 2.0一起使用 – 只需要使用长手:

 MyClass min = Enumerable.Min(list), max = Enumerable.Max(list); 

当然,如果你可以切换到C#3.0(仍然针对.NET 2.0)会更容易。

如果LINQBridge不是一个选项,你可以自己实现它:

 static void Main() { int[] data = { 3, 5, 1, 5, 5 }; int min = Min(data); } static T Min(IEnumerable values) { return Min(values, Comparer.Default); } static T Min(IEnumerable values, IComparer comparer) { bool first = true; T result = default(T); foreach(T value in values) { if(first) { result = value; first = false; } else { if(comparer.Compare(result, value) > 0) { result = value; } } } return result; }