C#LINQ:如何查找IList <Peak> .Max?

问题描述

| 我需要在给定的纬度和经度下找到最高的山峰。 我正在尝试修改此示例以与Peak类一起使用,但不了解如何在
IEnumerable<Peak>
而不是
IEnumerable<double>.
上使用.Max 编译器当然会抱怨   运算符\'== \'不能应用于   \'double \'和\'Peak \'类型的操作数 这是我第一次使用LINQ。 如何在ѭ2中找到最大海拔
public class Peak
{
    readonly Double latitude;
    public Double Latitude { get { return latitude; } }
    readonly Double longitude;
    public Double Longitude { get { return longitude; } }
    readonly Double elevation;
    public Double Elevation { get { return elevation; } }
    public Peak(Double latitude,Double longitude,Double elevation)
    {
        this.latitude = latitude;
        this.longitude = longitude;
        this.elevation = elevation;
    }
}
private IList<Peak> FindPeaks(IList<Peak> values,int rangeOfPeaks)
{
    var peaks = new List<Peak>();
    var checksOnEachSide = rangeOfPeaks / 2;
    for (var i = 0; i < values.Count; i++)
    {
        var current = values[i];
        IEnumerable<Peak> range = values;
        if (i > checksOnEachSide)
            range = range.Skip(i - checksOnEachSide);
        range = range.Take(rangeOfPeaks);
        if (current.Elevation == range.Max())
            peaks.Add(current);
    }
    return peaks;
}
    

解决方法

请参阅
Max<Peak>
用法以查找最大
Elevation
if (current.Elevation == range.Max(p => p.Elevation))
    peaks.Add(current); 
我建议您阅读一些有关lambda表达式的信息,以更好地了解此sintax的工作原理。     ,指定所需的最大属性:
if (current.Elevation == range.Max(p => p.Elevation))..