C#在List <double>中找到峰值的几个峰值点

时间:2018-03-28 12:39:01

标签: c#

我有一个List<double>,其中包含许多小数点,小数点后面的值。 该列表用于绘制股票市场的折线图,我想找到峰值点。

这是我的代码:

for (int i = 0; i < list.count-1; i++)
{
    if (list[i] > list[i-1] && list[i] < list[i+1])
    {
        peak.Add(list[i]);
    }
}

3 个答案:

答案 0 :(得分:0)

假设您在列表中寻找最小值和最大值:

var list = new List<double>(){ 1.1d, 2.2d, 3.3d, 4.4d, 5.5d, 6.6d };
double maxValue = list.Max();
double minValue = list.Min();

答案 1 :(得分:0)

您可以创建当前值大于上一个值和下一个值的索引列表:

        var nums = new List<double> {1.1, 1.8, 1.4, 1.9, 1.3, 2.5};
        var peakPoints = new List<int>();
        for (var i = 1; i < nums.Count - 1; i++)
        {
            //We start at index 1, because obviously the first value cannot be greater than the previous.
            //We also end at the second-to-last value because we can't check further.
            if(nums[i] > nums[i - 1] && nums[i] > nums[i + 1])
                peakPoints.Add(i);
        }

答案 2 :(得分:0)

如果您想从列表中找到峰值点。如 较低 - 较高(峰值) - 较低 ,您可以尝试这种方法。

var nums = new List<double> {0.9, 1.8, 1.1, 1.3, 1.6, 1.9, 2.3, 1.4};
for (int i = 1; i <= nums.Count-1; i++)
{
    if (nums[i] > nums[i-1] && nums[i] > nums[i+1])
    {
        Console.WriteLine(nums[i]);
    }
}