是否有某些东西可以在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的字典用作模板会更好吗?
编辑: 我不仅会移动这些数据,我还将使用此数据来计算某些内容。因此,我认为Queue不会对此有所帮助。
我需要这种方法。在这种方法中,我仅对array [6,2]执行此操作。 现在我想我需要更多地了解我的历史。所以我将拥有array [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;
}
}
}
答案 0 :(得分:1)
没有您想要的特定数据结构。此外,您已经提到添加元素不会经常发生...因此,KIS:保持简单。
您可以编写一个辅助函数,例如:
public static void PushElement<T>(ref T[,] arr, int index, T value)
{
var len1 = arr.GetLength(1);
Array.Copy(arr, index * len1, arr, index * len1 + 1, len1 - 1);
arr[index, 0] = value;
}
public static void Main()
{
int[,] arr = { { 1, 2, 3 }, { 4, 5, 6 } };
PushElement(ref arr, 1, 7);
arr[1,:]
现在将包含7,4,5。
答案 1 :(得分:0)
.NET中没有这样的数据结构。但这并不意味着您无法构建所需的东西。
您应该定义自己的周期长度n
,并保持current_index
到达0
索引时会回绕到n-1
。
class wrapping_array
{
public wrapping_array(int cycle)
{
n = cycle;
array = new int[cycle];
}
public int this[int index]
{
get => array[index];
set => array[index] = value;
}
int n, index;
int[] array;
public int insert(int value)
{
array[index++%n]=value;
}
}