我有列表List<MyType>
,我的类型包含Age
和RandomID
现在我想从此列表中找到最大年龄。
最简单,最有效的方法是什么?
答案 0 :(得分:78)
假设您有权访问LINQ,Age
是int
(您也可以尝试var maxAge
- 它更有可能编译):
int maxAge = myTypes.Max(t => t.Age);
如果您还需要RandomID
(或整个对象),快速解决方案是使用MaxBy
中的MoreLinq
MyType oldest = myTypes.MaxBy(t => t.Age);
答案 1 :(得分:31)
好的,所以如果你没有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 = FindMax(list, delegate(MyType x) { return x.Age; });
// C# 3
int maxAge = FindMax(list, x => x.Age);
或者您可以使用LINQBridge:)
在每种情况下,如果需要,您可以通过简单调用Math.Max
来返回if块。例如:
foreach (T item in list)
{
maxValue = Math.Max(maxValue, projection(item));
}
答案 2 :(得分:30)
int max = myList.Max(r => r.Age);
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.max.aspx
答案 3 :(得分:8)
thelist.Max(e => e.age);
答案 4 :(得分:1)
这样怎么样:
List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type
myList.Sort();
int greatestValue = myList[ myList.Count - 1 ];
您基本上让Sort()
方法为您完成工作,而不是编写自己的方法。除非你不想对你的收藏品进行排序。
答案 5 :(得分:1)
var maxAge = list.Max(x => x.Age);
答案 6 :(得分:0)
最简单的方法是使用如前所述的System.Linq
MSZoning
1
2
1
1
2
2
3
这也可以用字典
using System.Linq;
public int GetHighestValue(List<MyTypes> list)
{
return list.Count > 0 ? list.Max(t => t.Age) : 0; //could also return -1
}
答案 7 :(得分:0)
最简单的实际上只是Age.Max()
,您不再需要任何代码。