For循环,多个计数器

时间:2016-02-27 00:34:52

标签: c#

我想知道是否可以以某种方式实现以下伪代码。我有4个不同大小的索引列表,所以不能使用相同的参考计数器。我需要同时运行这四个,以便我可以在一行中将数​​据添加到datagridview。

            for (int m = 0, n = 0, p = 0, q = 0; m <= coords_Count, n <= outer_plf_Count, p <= planet_start_plf_Countt, q <= planet_plf_Count, m++, n++, p++, q++)
            {
                dataGridView1.Rows.Add(
                block_coords_list[m][(int)Coords.X],        //Column 1
                block_coords_list[m][(int)Coords.Y],        //Column 2
                block_coords_list[m][(int)Coords.Z],        //Column 3
                outer_plf_list[n][(int)Outer_plf.Hash],     //Column 4
                outer_plf_list[n][(int)Outer_plf.X],        //Column 5
                outer_plf_list[n][(int)Outer_plf.Y],        //Column 6
                outer_plf_list[n][(int)Outer_plf.Z],        //Column 7
                outer_plf_list[n][(int)Outer_plf.OrbitName],        //Column 8
                outer_plf_list[n][(int)Outer_plf.PrefabName],       //Column 9
                planet_start_plf_list[p][(int)Planet_Start_plf.X],  //Column 10
                planet_start_plf_list[p][(int)Planet_Start_plf.Y],  //Column 11
                planet_start_plf_list[p][(int)Planet_Start_plf.Z],  //Column 12
                planet_start_plf_list[p][(int)Planet_Start_plf.PlanetName],  //Column 13
                planet_start_plf_list[p][(int)Planet_Start_plf.PlanetBiome], //Column 14
                planet_start_plf_list[p][(int)Planet_Start_plf.StartTrue],   //Column 15
                planet_plf_list[q][(int)Planet_plf.X],      //Column 16
                planet_plf_list[q][(int)Planet_plf.Y],      //Column 17
                planet_plf_list[q][(int)Planet_plf.Z],      //Column 18
                planet_plf_list[q][(int)Planet_plf.PlanetaryBodyName],   //Column 19
                planet_plf_list[q][(int)Planet_plf.PrefabName]);         //Column 20
            }

1 个答案:

答案 0 :(得分:3)

如果源数组的长度不同,您可以考虑如果范围到达单个源数组的末尾时您希望范围如何工作。

最好的方法是让一个condition用于最长的数组,并在每列中使用三元运算符?:,以避免在该列的数据范围之外访问任何内容:

int a0Max = block_coords_list.Length;
int a1Max = outer_plf_list.Length;
int a2Max = planet_start_plf_list.Length;
int a3Max = planet_plf_list.Length;
int max = new Int32[] { a0Max, a1Max, a2Max, a3Max }.Max();

for (int i = 0; i < max, i++)
{
    dataGridView1.Rows.Add(
        i < a0Max ? block_coords_list[i][(int)coords.X] : null,
        i < a0Max ? block_coords_list[i][(int)coords.Y] : null,
        i < a0Max ? block_coords_list[i][(int)coords.Z] : null, 
        i < a1Max ? outer_plf_list[i][(int)outer_plf.Hash] : null,
        i < a1Max ? outer_plf_list[i][(int)outer_plf.X] : null,
        i < a1Max ? outer_plf_list[i][(int)outer_plf.Y] : null,
        i < a1Max ? outer_plf_list[i][(int)outer_plf.Z] : null,
        i < a1Max ? outer_plf_list[i][(int)outer_plf.OrbitName] : null,
        i < a1Max ? outer_plf_list[i[(int)outer_plf.PrefabName] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.X] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.Y] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.Z] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.PlanetName] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.PlanetBiome] : null,
        i < a2Max ? planet_start_plf_list[i][(int)planet_Start_plf.StartTrue] : null,
        i < a3Max ? planet_plf_list[i][(int)planet_plf.X] : null,
        i < a3Max ? planet_plf_list[i][(int)planet_plf.Y] : null,
        i < a3Max ? planet_plf_list[i][(int)planet_plf.Z] : null,
        i < a3Max ? planet_plf_list[i][(int)planet_plf.PlanetaryBodyName] : null,
        i < a3Max ? planet_plf_list[i][(int)planet_plf.PrefabName]
    );
}