我有List List<MyType>
,我的类型包含Age
和RandomID
现在,我想从此列表中找到最大年龄。
最简单,最有效的方法是什么?
Answers:
好的,因此,如果您没有LINQ,则可以对其进行硬编码:
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;
}
或者,您可以编写一个更通用的版本,可在许多列表类型中重用:
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;
}
您可以将其用于:
// C# 2
int maxAge = FindMaxValue(list, delegate(MyType x) { return x.Age; });
// C# 3
int maxAge = FindMaxValue(list, x => x.Age);
或者您可以使用LINQBridge :)
在每种情况下,都可以通过简单调用Math.Max
if来返回if块。例如:
foreach (T item in list)
{
maxValue = Math.Max(maxValue, projection(item));
}
delegate
示例进行详细说明。我也无法理解,这就是为什么我不得不使用您在同一块中使用的第二种方法的原因。FindMax的东西。
int max = myList.Max(r => r.Age);
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.max.aspx
var maxAge = list.Max(x => x.Age);
System.Linq
。官方文件
最简单的方法是使用System.Linq,如前所述
using System.Linq;
public int GetHighestValue(List<MyTypes> list)
{
return list.Count > 0 ? list.Max(t => t.Age) : 0; //could also return -1
}
使用字典也可以做到这一点
using System.Linq;
public int GetHighestValue(Dictionary<MyTypes, OtherType> obj)
{
return obj.Count > 0 ? obj.Max(t => t.Key.Age) : 0; //could also return -1
}
这样呢:
List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type
myList.Sort();
int greatestValue = myList[ myList.Count - 1 ];
您基本上是让Sort()
方法为您完成工作,而不是编写自己的方法。除非您不想对收藏进行排序。
List<int>(){ 5, 10, 15, 20 }
每当我们对该集合进行排序时,数字20总是在最后一个索引处,除非我们对其进行降序排序。