使用选定的索引计算平均值
本文关键字:索引 计算 平均值 | 更新日期: 2023-09-27 17:50:14
我的程序将坐标(双x,双y)读取到ListBox中,并需要在使用SelectedIndices和MultiExtended选择它们后计算它们的平均值。问题是我如何用每个Multiselection刷新我的代码。如您所见,我将SelectedIndices[0]设置为默认值0。目前,我的程序只是使第一个坐标除以所选索引的数量的平均值。
如果你想到任何改进我的代码的方法,我也想知道。
谢谢!
private void button3_Click(object sender, EventArgs e)//Average
{
int[] selected = new int[] {points_List.SelectedIndices[0] };
double sumX = 0, sumY = 0; ;
foreach (int iIndex in selected)
{
sumX += points[iIndex].X;
sumY += points[iIndex].Y;
}
averageX = (sumX) / (points_List.SelectedIndices.Count);
averageY = (sumY) / (points_List.SelectedIndices.Count);
label1.Text = "Average is: ";
label1.Text += averageX.ToString();
label1.Text += " ";
label1.Text += averageY.ToString();
}
正确的代码需要将SelectedIndices
转换为OfType<T>
或Cast<T>
。此外,调用ToArray
来实现结果也很方便,从而避免必须计算两次。
var selectedPoints = points_List.SelectedIndices.
OfType<int>().
Select(i => points[i]).
ToArray();
var averageX = selectedPoints.Average(p => p.X);
var averageY = selectedPoints.Average(p => p.Y);
最终方案,谢谢大家。
{
double averageX = 0, averageY = 0;
var selectedPoints = from int i in pointsList.SelectedIndices select points[i];
if (pointsList.SelectedIndices.Count == 0)
{
label1.Text = "Average is 0.000 0.000 ";//default text
return;
}
averageX = selectedPoints.Average(p => p.X);
averageY = selectedPoints.Average(p => p.Y);
label1.Text = "Average X: ";
label1.Text += averageX.ToString();
label1.Text += " Y:";
label1.Text += averageY.ToString();
}