c# - 将两个二维数组混合成1个二维数组

标签 c# arrays

我正在尝试将以前的数组(1 和 2)存储在新数组 3 中的结果可以显示数组 1 的每个结果和每个数组 2,当我分别显示每个数组的结果时,它们是可以的,但是当我尝试将它们混合在数组 3 中,我得到了数组 1 中第一个值和数组 2 中所有值的正确答案,然后出现了很多零。

这是数组 3 的代码

for (int i = 0; i < result1.GetLength(0); i++)
          {
               for (int j = 0; j < result1.GetLength(1); j++)
               {
                   for (int k = 0; k < result2.GetLength(0); k++)
                    {
                      for (int m = 0; m < result2.GetLength(1); m++)
                       {

                            result3[i, j] = result1[i, j] + "," + result2[k, m];
                            Console.WriteLine(result3[i, j]);

                            counter++;
                        }
                    }

                }

            }

这里是完整的代码

double[,] Cranelocations = { { -12.3256, 0.5344 }, { -12.3256, -0.4656 }, { -12.3256, -1.4656 }, { -12.3256, -2.4656 } };

double[,] Picklocation = { { -0.3256, -3.4656 }, { 0.6744, -3.4656 }, { 1.6744, -3.4656 }, { 2.6744, -3.4656 }, { 3.6744, -3.4656 }, { 4.6744, -3.4656 }, { 5.6744, -3.4656 } };

double[,] Setlocation = { { 20.62, 5.03 }, { 24.28, 5.03 }, { 28.40, 5.03 }, { 32.11, 5.03 }, { 35.99, 5.26 }, { 40.18, 5.26 } };

double[] Weights = { 11.7865, 14.7335, 15.1015, 10.7465 };

double[,] result1 = new double[Weights.Length * Cranelocations.GetLength(0), Picklocation.GetLength(0)];

double[,] result2 = new double[Weights.Length * Cranelocations.GetLength(0), Setlocation.GetLength(0)];

object[,] result3 = new object[result1.GetLength(0) * result1.GetLength(1), result2.GetLength(0) * result2.GetLength(1)];

            int counter = 0;

            for (int m = 0; m < Weights.Length; m++)
            {
                for (int i = 0; i < Cranelocations.GetLength(0); i++)
                {
                    for (int j = 0; j < Picklocation.GetLength(0); j++)
                    {


                        double x = Cranelocations[i, 0] - Picklocation[j, 0];
                        double y = Cranelocations[i, 1] - Picklocation[j, 1];

                        result1[i, j] = Weights[m] * (Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)));


                    }


                }
            }

            Console.WriteLine("-----------------------------------------------------------------");

            for (int m = 0; m < Weights.Length; m++)
            {
                for (int i = 0; i < Cranelocations.GetLength(0); i++)
                {
                    for (int j = 0; j < Setlocation.GetLength(0); j++)
                    {


                        double x = Cranelocations[i, 0] - Setlocation[j, 0];
                        double y = Cranelocations[i, 1] - Setlocation[j, 1];

                        result2[i, j] = Weights[m] * (Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)));


                    }

                }
            }


            for (int i = 0; i < result1.GetLength(0); i++)
            {
                for (int j = 0; j < result1.GetLength(1); j++)
                {
                    for (int k = 0; k < result2.GetLength(0); k++)
                    {
                        for (int m = 0; m < result2.GetLength(1); m++)
                        {

                            result3[i, j] = result1[i, j] + "," + result2[k, m];
                            Console.WriteLine(result3[i, j]);

                            counter++;

                        }
                    }

                }

            }

}

最佳答案

对于每个 m,您将 i 重置为 0 并再次从数组的开头开始写入。

当您递增m 时,您需要继续向前移动索引。

当您合并两个索引时也是如此。当您组合两个迭代以获得索引时,您通常将第一个迭代乘以第二个迭代的长度,然后将它们相加。

for (int m = 0; m < Weights.Length; m++)
{
    int offset = m * Cranelocations.GetLength(0);

    for (int i = 0; i < Cranelocations.GetLength(0); i++)
    {
        for (int j = 0; j < Picklocation.GetLength(0); j++)
        {
            double x = Cranelocations[i, 0] - Picklocation[j, 0];
            double y = Cranelocations[i, 1] - Picklocation[j, 1];

            result1[i + offset, j] = Weights[m] * (Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)));
        }
    }
}

Console.WriteLine("-----------------------------------------------------------------");

for (int m = 0; m < Weights.Length; m++)
{
    int offset = m * Cranelocations.GetLength(0);

    for (int i = 0; i < Cranelocations.GetLength(0); i++)
    {
        for (int j = 0; j < Setlocation.GetLength(0); j++)
        {
            double x = Cranelocations[i, 0] - Setlocation[j, 0];
            double y = Cranelocations[i, 1] - Setlocation[j, 1];

            result2[i + offset, j] = Weights[m] * (Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)));
        }
    }
}

for (int i = 0; i < result1.GetLength(0); i++)
{
    int iOffset = i * result1.GetLength(1);

    for (int j = 0; j < result1.GetLength(1); j++)
    {
        for (int k = 0; k < result2.GetLength(0); k++)
        {
            int kOffset = k * result2.GetLength(1);

            for (int m = 0; m < result2.GetLength(1); m++)
            {
                result3[iOffset + j, kOffset + m] = result1[i, j] + "," + result2[k, m];
                Console.WriteLine(result3[iOffset + j, kOffset + m]);

                counter++;
            }
        }
    }
}

关于c# - 将两个二维数组混合成1个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133402/

相关文章:

c# - VS2015图标指南-颜色反转

java - 比较数组中的元素是否重复

python - 将不同大小的 numpy 数组相乘

Python:如何基于变量创建数组的数组?

c# - MonoMac 系统.Drawing.Image.GetPropertyItem(0x5100)

c# - Azure 数据库的 DATEADD 函数

python - 将值从 python 循环 append 到单个列表或数组

java - 可能会损失精度所需的 int 找到的双数组

c# - VS 在 'Set As StartUp Project' 后崩溃

c# - 忽略前导和尾随空格的 View 模型验证