【发布时间】:2020-03-21 16:52:35
【问题描述】:
有什么东西可以让C# 创建数组,例如int[6,10]。
并且总是当我添加新元素[i,0]时,这一行中的所有元素都会移动+1。最后将删除。
现在我必须这样做:
array[i, 2] = array[i, 1];
array[i, 1] = array[i, 0];
array[i, 0] = value;
例如使用带有 int 和 List 的字典会更好吗?
编辑: 我不仅移动这些数据,我还将使用这些数据来计算一些东西。所以我认为队列不会对此有好处。
我需要这样的方法。在这种方法中,我只为数组 [6,2] 执行此操作。 现在我想我需要更多地了解我的历史。所以我会有数组[6,10]。 我将检查不同的情况并创建依赖项。我需要一些东西,让它看起来尽可能清晰并快速工作。
public static double CalculateLastValue(double value, KalmanModel k, int i)
{
if (k.LastDistance[i, 0] == 0 && k.LastDistance[i, 1]==0)
{
k.LastDistance[i, 0] = value;
k.LastDistance[i, 1] = value;
}
if (k.LastDistance[i, 0] == k.LastDistance[i, 1])
{
if (Math.Abs(value - k.LastDistance[i, 0]) > 2 && value < k.LastDistance[i, 0])
{
value = k.LastDistance[i, 0] - 2;
}
else if (Math.Abs(value - k.LastDistance[i, 0]) > 2 && value > k.LastDistance[i, 0])
{
value = k.LastDistance[i, 0] + 2;
}
k.LastDistance[i, 1] = k.LastDistance[i, 0];
k.LastDistance[i, 0] = value;
return value;
}
else if (k.LastDistance[i, 0] > k.LastDistance[i, 1])
{
if (value >= k.LastDistance[i, 0])
{
if (Math.Abs(value - k.LastDistance[i, 0]) > 2)
{
value = k.LastDistance[i, 0] + 2;
}
k.LastDistance[i, 1] = k.LastDistance[i, 0];
k.LastDistance[i, 0] = value;
return value;
}
else
{
value = k.LastDistance[i, 0];
k.LastDistance[i, 1] = k.LastDistance[i, 0];
return value;
}
}
else
{
if (value <= k.LastDistance[i, 0])
{
if (Math.Abs(value - k.LastDistance[i, 0]) > 2)
{
value = k.LastDistance[i, 0] - 2;
}
k.LastDistance[i, 1] = k.LastDistance[i, 0];
k.LastDistance[i, 0] = value;
return value;
}
else
{
value = k.LastDistance[i, 0];
k.LastDistance[i, 1] = k.LastDistance[i, 0];
return value;
}
}
}
【问题讨论】:
-
除非随机访问是一个要求,否则听起来你想要一个队列。
-
看看新的 C# 8 索引和范围docs.microsoft.com/en-us/dotnet/csharp/whats-new/…
-
你想要的太具体了:没有通用的容器。您可以自己轻松实现。
-
来自朋友链接的rolling list 不是一个好的欺骗目标吗?还是我错过了一项要求?
标签: c#