testdome test online net knowledge examen español dome answers c# .net algorithm

c# - test - Código más corto para calcular la lista min/max en.NET



test dome c# (4)

Me gustaría algo como

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

¿Hay una forma integrada de hacer esto en .NET?


Bueno, si no puede usar .NET 3.5, siempre puede ordenar la lista y luego devolver la lista [0]. Puede que no sea la manera más rápida, pero probablemente sea el código más corto, especialmente si tu clase ya implementa 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

Esto también asume, por supuesto, que no importa qué artículo devuelva si tiene múltiples artículos que son el mínimo o el máximo.

Si su clase no implementa IComparable, puede pasar un delegado anónimo, algo como esto:

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


Intente mirar estos:

Min.

Max

Mientras su clase implemente IComparable, todo lo que tiene que hacer es:

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


Notará que "Todavía estoy en 2": es posible que desee ver LINQBridge . En realidad, esto está dirigido a C # 3.0 y .NET 2.0, pero debería poder usarlo con C # 2.0 y .NET 2.0, solo tendrá que usar el comando long-hand:

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

Por supuesto, será más fácil si puede cambiar a C # 3.0 (aún apuntando a .NET 2.0).

Y si LINQBridge no es una opción, puede implementarlo usted mismo:

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; }


Usando Linq tienes las funciones Min () y Max ().

Entonces puede hacer list.AsQueryable().Min();