将矩阵分配给C#中的[]数组矩阵

时间:2018-06-11 04:20:24

标签: c# arrays

初始值

    Matrix<float>[] output_measurement = new Matrix<float>[25];
    Matrix <float> output_measurement_temp= new Matrix<float>(6, 1);
    for (int i = 0; i < 25; i++)
     {

     output_measurement[i] = new Matrix<float>(6, 1);         
     }

分配值

    for (int i =0;i<25;i++)
    {
     for (int j = 0; j < 3; j++)
     {
      if (measure1joint[j, 0] != 10f)
      {
     output_measurement_temp[j, 0] = measure1joint[j, 0];
     output_measurement_temp[j + 3,0] = 0f;// set velocity =0                                    
      }
     }
     output_measurement[i]=output_measurement_temp;// Problem here!
    }

我的问题是:每次更改Maitrix“output_measurement_temp”的值时,数组Matrix中的所有已分配值一起更改为新更新的output_measurement_temp。例如:

第一次:output_measurement_temp = 0,output_measurement [0] = 0

第二次:output_measurement_temp = 1,output_measurement [0] = 1 ,output_measurement [1] = 1

任何人都可以帮我解释它为什么会发生。

编辑:如果我在为其分配新值之前重置output_measurement_temp的值,则“output_measurement”中指定值的值将不再更改。但我不知道为什么它可以提供帮助

  output_measurement_temp = new Matrix<float>(6, 1);
       for (int j = 0; j < 3; j++)
       {some code...}

2 个答案:

答案 0 :(得分:1)

C#中的Matrix是一种引用类型,但它是一种值类型。当你更改&#34; output_measurement_temp&#34;并将其分配给output_measurement [i],您只需指定&#34; output_measurement_temp&#34;的引用。实际上是output_measurement [i]而不是output_measurement_temp的值。每次你标记为&#34;在这里有问题的行&#34;也是这样。

答案 1 :(得分:0)

我很长时间没有使用过C#或Java,所以我希望你可以原谅我在这里犯的任何错误。根据您的描述,output_measurement_temp看起来不存储Matrix,但它包含Matrix值存储在内存中的位置的地址。因此,每次将新值传递给output_measure_temp时,它都会使用output_measurement_temp上的地址并在内存中找到该位置,并将值更改为您要存储的值。

在第二种情况下,当您声明new时,您在内存中分配一个新位置以存储新值。

check this out