C#LINQ:如何找到IList <peak> .Max?</peak>

时间:2011-05-24 13:49:54

标签: c# linq

我需要找到给定纬度和长度的最高峰。 我正在尝试修改this example以使用类Peak但不了解如何在IEnumerable<Peak>上使用.Max而不是IEnumerable<double>. 当然,编译器抱怨

  

运算符'=='无法应用于   'double'和'Peak'类型的操作数

这是我第一次使用LINQ。 如何在IEnumerable<Peak> range?

中找到最大高程
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;
}

2 个答案:

答案 0 :(得分:5)

指定您想要的最大值:

if (current.Elevation == range.Max(p => p.Elevation))..

答案 1 :(得分:4)

请参阅Max<Peak>用法以查找最大Elevation

if (current.Elevation == range.Max(p => p.Elevation))
    peaks.Add(current); 

我建议你阅读一些关于lambda expressions的内容,以便更好地理解这个sintax的工作原理。