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

C# 计算.NET中列表最小值/最大值的最短代码,c#,.net,algorithm,C#,.net,Algorithm,我想要一些像 int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);}); 在.NET中是否有一种内置的方法可以做到这一点?请尝试查看以下内容: 只要您的类实现了IComparable,您所要做的就是: List<MyClass> list = new List(); //add whatever you need to add MyClass min = lis

我想要一些像

int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
在.NET中是否有一种内置的方法可以做到这一点?

请尝试查看以下内容:

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

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

MyClass min = list.Min();
MyClass max = list.Max();
List List=新列表();
//添加您需要添加的内容
MyClass min=list.min();
MyClass max=list.max();

使用Linq,您可以使用Min()和Max()函数

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

您注意到“我仍然在2中”-那么,您可能想看看。这实际上是针对C#3.0和.NET 2.0的,但您应该能够将其与C#2.0和.NET 2.0一起使用-只需使用长线:

MyClass min = Enumerable.Min(list),
        max = Enumerable.Max(list);
当然,如果您可以切换到C#3.0(仍然以.NET2.0为目标),这会更容易

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

static void Main()
{
    int[] data = { 3, 5, 1, 5, 5 };
    int min = Min(data);
}
static T Min<T>(IEnumerable<T> values)
{
    return Min<T>(values, Comparer<T>.Default);
}
static T Min<T>(IEnumerable<T> values, IComparer<T> 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;
}
static void Main()
{
int[]数据={3,5,1,5,5};
int min=min(数据);
}
静态最小温度(IEnumerable值)
{
返回最小值(值,比较器默认值);
}
静态最小T(IEnumerable值,IComparer比较器)
{
bool first=true;
T结果=默认值(T);
foreach(值中的T值){
如果(第一)
{
结果=值;
第一个=假;
}
其他的
{
如果(比较器比较(结果、值)>0)
{
结果=值;
}
}
}
返回结果;
}

如果您不能使用.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

我想是.NET3.5吧。我仍然在2中,甚至没有意识到它们的存在。如果你仍然在.NET 2.0中,这怎么可能是你接受的答案呢?短代码对我来说不是一个标准。使您的代码尽可能清晰易读。您不必按行付费;)。我不知道列表中有Min和Max函数。你在这里每天都能学到新东西!:-)我最终实现了它——我相信我的代码与您的代码片段一模一样。您是从我的源代码管理中获取的吗?:)我同意,我喜欢它…特别是考虑到他是2.0版的。向上投票!
list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); });