我想是這樣最短代碼來計算列表最小/最大的.NET
int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
有一個內置的方式在.NET中做到這一點?
我想是這樣最短代碼來計算列表最小/最大的.NET
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();
使用LINQ你有Min()和Max()函數。
所以,你可以做list.AsQueryable().Min();
輕微:在這裏不需要AsQueryable()... – 2008-10-30 21:13:21
您注意,「我仍然在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<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;
}
好吧,如果你不能使用.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
當然,如果您有多個項目是最小值或最大值,那麼返回哪個項目並不重要。
如果您的類未實現IComparable,你可以傳遞一個匿名委託,像這樣:
list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); });
短代碼是不是我的度量。 儘可能使您的代碼清晰可讀。你不支付每行;)。 – Tigraine 2008-10-30 21:28:34