tengo Lista List<MyType>
, mi tipo contiene Age
y RandomID
Obtener el valor máximo de la Lista <myType>
Ahora quiero encontrar la edad máxima de esta lista.
¿Cuál es la forma más simple y más eficiente?
tengo Lista List<MyType>
, mi tipo contiene Age
y RandomID
Obtener el valor máximo de la Lista <myType>
Ahora quiero encontrar la edad máxima de esta lista.
¿Cuál es la forma más simple y más eficiente?
bien, así que si usted no tiene LINQ, podrías difícil que el código:
public int FindMaxAge(List<MyType> list)
{
if (list.Count == 0)
{
throw new InvalidOperationException("Empty list");
}
int maxAge = int.MinValue;
foreach (MyType type in list)
{
if (type.Age > maxAge)
{
maxAge = type.Age;
}
}
return maxAge;
}
O se podría escribir una versión más general, volver a usar en una gran cantidad de tipos de listas:
public int FindMaxValue<T>(List<T> list, Converter<T, int> projection)
{
if (list.Count == 0)
{
throw new InvalidOperationException("Empty list");
}
int maxValue = int.MinValue;
foreach (T item in list)
{
int value = projection(item);
if (value > maxValue)
{
maxValue = value;
}
}
return maxValue;
}
Usted puede usar esto con:
// C# 2
int maxAge = FindMax(list, delegate(MyType x) { return x.Age; });
// C# 3
int maxAge = FindMax(list, x => x.Age);
O puede usar LINQBridge :)
En cada caso, puede devolver el bloque if con una simple llamada al Math.Max
si lo desea. Por ejemplo:
foreach (T item in list)
{
maxValue = Math.Max(maxValue, projection(item));
}
suponiendo que tiene acceso a LINQ, y Age
es un int
(También puede intentar var maxAge
- es más probable que compilar):
int maxAge = myTypes.Max(t => t.Age);
Si también necesita la RandomID
(o la totalidad del objeto) , una solución rápida es usar MaxBy
de MoreLinq
MyType oldest = myTypes.MaxBy(t => t.Age);
thelist.Max(e => e.age);
int max = myList.Max(r => r.Age);
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.max.aspx
Indicando lo obvio, pero ... Para usar esto en .net 4.0 y VS2010, necesita "usar System.Linq;". Al hacer clic derecho en el error no aparece la opción "Resolver". – Soenhay
¿Qué hay de esta manera:
List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type
myList.Sort();
int greatestValue = myList[ myList.Count - 1 ];
Es, básicamente, dejar que el método Sort()
para hacer el trabajo para usted en vez de escribir su propio método. A menos que no quieras ordenar tu colección.
El tipo de delegado podría dar el ejemplo – Shrivallabh
@Shrivallabh: no sé lo que quiere decir, me temo. –
@JonSkeet, creo que necesita un poco de elaboración para el ejemplo de 'delegado'. No pude entender eso también, es por eso que tuve que ir con el segundo método que usaste en el mismo bloque. Lo de FindMax. –