NET'te liste min/maks hesaplamak için en kısa kod
int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
gibi bir şey isterim Bunu .NET'te yapmanın bir yolu var mı?
NET'te liste min/maks hesaplamak için en kısa kod
int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);});
gibi bir şey isterim Bunu .NET'te yapmanın bir yolu var mı?
bunlara bakarak deneyin: Sürece sınıf IComparable uygulayan olarak
, yapmanız gereken tek şey: Linq kullanarak
List<MyClass> list = new List();
//add whatever you need to add
MyClass min = list.Min();
MyClass max = list.Max();
var Min() ve Max() işlevleri. Eğer, o zaman, LINQBridge bakmak isteyebilirsiniz -
Yani "Ben 2'de hala değilim" olduğunu not almanız list.AsQueryable().Min();
Minör: AsQueryable() 'a gerek yok ... –
List <> Min ve Max fonksiyonlarının olduğunu bilmiyordum. Her gün yeni bir şeyler öğreniyorsun! :-) –
yapabilirsiniz. Bu aslında C# 3.0 ve .NET 2.0 hedefleniyor, ancak bunu kullanmak gerekir C# 2.0 ve .NET 2.0 - Sadece uzun elden kullanmak gerekecektir: Elbette
MyClass min = Enumerable.Min(list),
max = Enumerable.Max(list);
, C# 3.0'a geçebilirsiniz (hala .NET 2.0'ı hedefliyor). .NET 3.5 kullanamıyorsanız
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;
}
Uygulamayı bitirdim - Kodumun snippet'iniz gibi TAMAM olduğunu düşünüyorum. Kaynak kontrolümden mi aldın? :) – ripper234
Eh, her zaman [0 listesini döndürür ardından listeyi sıralamak ve olabilir:
Ve LINQBridge bir seçenek değilse, bunu kendiniz uygulayabilir
]. En hızlı yol olmayabilir, ancak muhtemelen en kısa kod, özellikle de sınıfınız IComparable'ı uyguluyorsa.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
Bu aynı zamanda minimum veya maksimum olan birden çok öğe varsa iade hangi madde önemli olmadığını, tabii ki, varsayar. Sınıf IComparable uygulamak etmezse
, böyle, anonim bir temsilci şey geçirebilirsiniz:
list.Sort(delegate(SomeClass x, SomeClass y) { return string.Compare(x.Name, y.Name); });
Kabul ediyorum, özellikle beğendim ... özellikle de 2.0. Upvoted! – Ken
Kısa kod benim için metrik değildir. Kodunuzu mümkün olduğunca açık ve okunabilir yapın. Satır başına ödeme yapmazsınız;). – Tigraine