首页 > 解决方案 > 我正在寻找“滑动阵列”

问题描述

例如,有没有什么东西可以让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#

解决方案


您想要的没有特定的数据结构。此外,您已经提到添加元素不会经常发生......所以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。


推荐阅读