如何避免我的数组在循环过程中被重新分配值?
How to avoid my array from being reassigned values as I progress through my loop?
下面是我的代码-
double[][] geometricReturnsArray = new double[returnsArray.Count][];;
double[] tempGeometricReturns = new double[returnsArray[0].Count];
double return_1 = 0;
double return_2 = 0;
for (int i = 0; i < returnsArray.Count; i++)
{
for (int j = 0; j < returnsArray[i].Count - 1; j++)
{
return_1 = returnsArray[i][j + 1];
return_2 = returnsArray[i][j];
tempGeometricReturns[j] = ((return_1 - return_2) / return_2) * 100;
}
geometricReturnsArray[i] = tempGeometricReturns;
}
我在代码中面临的问题是 tempGeometricReturns
随着 i
的增加而不断被重新分配。所以最后,geometricReturnsArray
的所有三个数组都具有完全相同的值,因为 tempGeometricReturns
被重新分配,geometricReturnsArray
.
中的先前值也是如此
我也尝试使用列表,但后来我只得到一个包含 267 个值的长列表,而我更喜欢三个长度为 90 的数组。我还能尝试做什么?
在您的示例中,您最终会在 geometricReturnsArray
中多次引用同一数组。数组是引用类型,所以赋值只复制引用,而不是整个数组。
修复方法是为每个外循环创建一个新数组,例如在执行赋值时复制现有数组
}
geometricReturnsArray[i] = tempGeometricReturns.ToArray();
}
或
for (int i = 0; i < returnsArray.Count; i++)
{
double[] tempGeometricReturns = new double[returnsArray[0].Count];
for (int j = 0; j < returnsArray[i].Count - 1; j++)
{
下面是我的代码-
double[][] geometricReturnsArray = new double[returnsArray.Count][];;
double[] tempGeometricReturns = new double[returnsArray[0].Count];
double return_1 = 0;
double return_2 = 0;
for (int i = 0; i < returnsArray.Count; i++)
{
for (int j = 0; j < returnsArray[i].Count - 1; j++)
{
return_1 = returnsArray[i][j + 1];
return_2 = returnsArray[i][j];
tempGeometricReturns[j] = ((return_1 - return_2) / return_2) * 100;
}
geometricReturnsArray[i] = tempGeometricReturns;
}
我在代码中面临的问题是 tempGeometricReturns
随着 i
的增加而不断被重新分配。所以最后,geometricReturnsArray
的所有三个数组都具有完全相同的值,因为 tempGeometricReturns
被重新分配,geometricReturnsArray
.
我也尝试使用列表,但后来我只得到一个包含 267 个值的长列表,而我更喜欢三个长度为 90 的数组。我还能尝试做什么?
在您的示例中,您最终会在 geometricReturnsArray
中多次引用同一数组。数组是引用类型,所以赋值只复制引用,而不是整个数组。
修复方法是为每个外循环创建一个新数组,例如在执行赋值时复制现有数组
}
geometricReturnsArray[i] = tempGeometricReturns.ToArray();
}
或
for (int i = 0; i < returnsArray.Count; i++)
{
double[] tempGeometricReturns = new double[returnsArray[0].Count];
for (int j = 0; j < returnsArray[i].Count - 1; j++)
{