【发布时间】:2020-01-18 00:57:13
【问题描述】:
将两个数组合并在一起时,我有一个非常奇怪的行为:
假设
我有一个类 Tensor,其中包含一个数组 float[] 和一个函数 AddTensorElements:
class Tensor
{
public float[] MovingAverage3h { get; set; }
public float[] MovingAverage6h { get; set; }
public float[] MovingAverage1d { get; set; }
public void AddTensorElements(Tensor input)
{
if (this.MovingAverage3h == null)
this.MovingAverage3h = input.MovingAverage3h;
this.MovingAverage6h = input.MovingAverage6h;
this.MovingAverage1d = input.MovingAverage1d;
}
else
{
this.MovingAverage3h = Concat(this.MovingAverage3h, input.MovingAverage6h);
this.MovingAverage6h = Concat(this.MovingAverage6h, input.MovingAverage6h);
this.MovingAverage1d = Concat(this.MovingAverage1d, input.MovingAverage1d);
}
private float[] Concat (float[] first, float[] second)
{
List<float> concatenated = new List<float>();
concatenated.AddRange(first);
concatenated.AddRange(second);
//foreach (float value in first) concatenated.Add(value);
//foreach (float value in second) concatenated.Add(value);
float[] returnArray = concatenated.ToArray();
return returnArray;
}
}
在我的主程序中,我反复将张量 M6t 添加到基本张量 Minutes30[i]
class TensorCreator
{
private static List<Elements.Tensor> Minutes30 = new List<Elements.Tensor>();
private static void AddValues(Tensor M6t)
{
// Fill Minutes 30
Minutes30.Add(M6t);
for (int i = CounterM30; i < Minutes30.Count-1; i += M6)
{
{ } // Issue come up right here
Minutes30[i].AddTensorElements(M6t);
{ } // Issue come up right here
}
}
public static void AppendDataToTensor(Elements.Tensor queueElement)
{
// ...
AddValues(M6Avg);
}
}
预期行为与实际行为
Minutes[i] 中的数组展开M6t 内的数组保持float[1]
到目前为止一切顺利,这可以在一个单独的小型测试应用程序中使用
在我的实际应用程序中,相同的代码让 baseTensor 扩展,但输入张量也得到扩展!
for (int i = CounterM30; i < Minutes30.Count-1; i += M6)
{
// M6T.Length == 1;
Minutes30[i].AddTensorElements(M6t);
// M6T.Length == Minutes30[i].Length;
}
【问题讨论】:
-
List<>.AddRange会让您的生活更轻松。 -
同样的结果。正如我所写。
-
我没有说它会解决你的问题。
-
你能分享实际的可重现代码吗?我能看懂你的测试代码,但是后面不知道你在说什么。
-
问题是代码很长,但我会试一试,
标签: c# arrays concatenation