Оптимизировать код за счет сокращения количества условных операторов - C#
Формулировка задачи:
Доброго времени суток.
Прошу помощь в сокращение размера кода, если конечно это возможно.
Z, R, Fi - берутся из листа Excel. R = 60, Z = 68, Fi = 36.
В dataGridView1 так же загружены данные с листа Excel.
for (int ugol = 0; ugol < Fi; ugol++) { if (ugol == 0) { // для угла Fi = 0 Double[,] angle0 = new double[Z, R * 2 + 1]; for (int i = 1; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle0[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString()); } } } else if (ugol == 1) { // для угла Fi = 10 Double[,] angle10 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle10[i, j] = Convert.ToDouble(dataGridView1.Rows[i + Z + 4].Cells[j].Value.ToString()); } } } else if (ugol == 2) { // для угла Fi = 20 Double[,] angle20 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle20[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } else if (ugol == 3) { // для угла Fi = 30 Double[,] angle30 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle30[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } else if (ugol == 4) { // для угла Fi = 40 Double[,] angle40 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle40[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } else if (ugol == 5) { // для угла Fi = 50 Double[,] angle50 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle50[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } else if (ugol == 6) { // для угла Fi = 60 Double[,] angle60 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle60[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } else if (ugol == 7) { // для угла Fi = 70 Double[,] angle70 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle70[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } ..... /* весь код не влез. весь код предоставлен в прикрепленном файле.*/ /* и так до */ else //if (ugol == 35) { // для угла Fi = 350 Double[,] angle350 = new double[Z + 1, R * 2 + 1]; for (int i = 0; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle350[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString()); } } } } }
Решение задачи: «Оптимизировать код за счет сокращения количества условных операторов»
textual
Листинг программы
private static void GetValues(int Fi, int Z, int R) { Dictionary<int, double[,]> angles = new Dictionary<int, double[,]>(); for (int ugol = 0; ugol < Fi; ugol++) { var size = ugol == 0 ? Z : Z + 1; double[,] angle = new double[size, R * 2 + 1]; for (int i = 1; i <= Z; i++) { for (int j = 0; j <= R * 2; j++) { angle[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString()); } } angles.Add(ugol * 10, angle); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д