Shortest code to calculate list min/max in .NET


Question

I'd like something like

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

Is there a builtin way to do this in .NET?

2
9
10/30/2008 3:17:07 PM

Accepted Answer

Try looking at these:

Min

Max

As long as your class implements IComparable, all you have to do is:

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

MyClass min = list.Min();
MyClass max = list.Max();
19
10/30/2008 3:27:37 PM

Exper Answer

You note that "I'm still in 2" - you might, then, want to look at LINQBridge. This is actually aimed at C# 3.0 and .NET 2.0, but you should be able to use it with C# 2.0 and .NET 2.0 - just you'll have to use the long-hand:

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

Of course, it will be easier if you can switch to C# 3.0 (still targetting .NET 2.0).

And if LINQBridge isn't an option, you can implement it yourself:

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;
}
2
10/30/2008 9:18:22 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon