1

私のプログラムは座標(double x,douule y)をListBoxに読み込み、SelectedIndicesとMultiExtendedでそれらを選択した後、それらの平均を計算する必要があります。問題は、複数選択ごとにコードを更新する方法です。ご覧のとおり、デフォルトで SelectedIndices[0] を 0 に設定しています。現時点では、私のプログラムは、最初の座標の平均をselectedIndicesの数で割ったものです。

私のコードを改善する方法について考えているなら、私も知りたいです。

ありがとう!

   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();
    }
4

2 に答える 2

1

SelectedIndices正しいコードには、OfType<T>またはのキャストが必要ですCast<T>ToArrayまた、 2 回計算する必要がないように、結果をマテリアライズするために呼び出すと便利です。

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);
于 2013-01-01T23:46:30.800 に答える
0

最終的な解決策、ありがとう。

        {
        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();
    }
于 2013-01-03T21:22:08.097 に答える