【发布时间】:2021-05-16 11:13:48
【问题描述】:
嘿,我正在尝试制作 7 天移动平均线,但我不知道如何去做。我目前拥有的是用户在 DataGrid 中输入值,然后在输入 7 个数字后,他们得到这些数字的平均值(数字总和 / 7)。我已经设法实现了这一点,但我想要一个移动平均线,这样当他们输入第 8 个或第 9 个值等时,他们会得到最后 7 个值的新平均值。我不确定我将如何继续实施。所以它现在的工作方式是用户通过将值输入到名为“AddWeightToGrid”的文本框中将值输入到 DataGrid 然后该值进入一个名为“gridListValues”的 ObservableCollectionsList,这就是 DataGrids ItemSource(DataGrid 称为“WeightDataGrid”) .以下是 7 天平均值计算现在的样子:
private void AddWeightToGridButton_Click(object sender, RoutedEventArgs e)
{
if (gridListValues.Count <= 5)
gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid) });
else if (gridListValues.Count >= 6)
{
gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid), SevenDayWeightAverage = SevenDayAverageCalc(averageWeight) });
}
}
private string SevenDayAverageCalc(WeightGridValues averageWeight)
{
decimal sevenDayCalc = 0;
for (int i = 0; i < gridListValues.Count; i++)
{
sevenDayCalc += Convert.ToDecimal(gridListValues[i].Weight);
}
sevenDayCalc += Convert.ToDecimal(AddWeightToGrid.Text);
sevenDayCalc = sevenDayCalc / 7;
return averageWeight.SevenDayWeightAverage = Convert.ToString(sevenDayCalc);
}
我希望我能很好地解释我的问题是什么以及我想要实现什么。如果我没有请我澄清一下。任何帮助表示感谢!
【问题讨论】:
-
最好的方法是当您在列表中获得七个项目时,从对象中删除项目零。
-
这可以工作,但如果有意义的话,我想保存网格中的所有值。 (常规值和平均值)不过这样做似乎很复杂。
-
获取列表长度并平均最后 7 个。如果长度为 10,则可以跳过前三个。 gridListValues.Skip(gridListValues.Count - 7).Average(x => x.Weight);
-
谢谢。我忘了说我是编程新手,所以我不太明白 => 是什么。我已经意识到这个项目对于我现在的技能水平来说可能有点太多了。可能最好把它搁置一段时间,直到我好转。但是感谢您的帮助!