推送索引数组

时间:2014-02-08 16:18:01

标签: c# arrays

我确信我找到的是一个词,但是因为我不知道它我找不到我的问题的答案,我所拥有的是一个双锯齿状的数组,我想要的价值在索引0处为索引1的值相同,索引1直到数组结束时为2,最后一个索引为pish到索引0

示例:

原始

private double[][] array = { {1, 2, 3, 4}, {5, 6, 7, 8}, ...}

成为(修改后) 我知道我似乎正在重新声明阵列不是重点,它只是告诉你它应该是什么。

private double[][] array = { {4, 1, 2, 3}, {8, 5, 6, 7}, ...}

修改

如果您对我正在寻找的内容有所了解,您是否可以在评论中这样说,我会删除该问题并进一步深入研究

2 个答案:

答案 0 :(得分:3)

这通常称为旋转。你可以实现for - 循环,但请注意,由于你向右旋转,从后到前更容易按照你的方式工作,如下所示:

for(var i = 0; i < array.Length; i++)
{
    var len = array[i].Length;
    if (len > 1) {
        var last = array[i][len - 1];
        for(var j = len - 1; j > 0; j--)
        {
            array[i][j] = array[i][j - 1];
        }
        array[i][0] = last;
    }
}

答案 1 :(得分:1)

您可以轻松使用List Queue而不是锯齿状数组。下面是一个如何看待锯齿状阵列以及如何移动元素的示例:

var queues = new List<Queue<double>>();

//first queue (1,2,3,4)
var queue = new Queue<double>();
queue.Enqueue(4);
queue.Enqueue(3);
queue.Enqueue(2);
queue.Enqueue(1);
queues.Add(queue);

//second queue (5,6,7,8)
var queue2 = new Queue<double>();
queue.Enqueue(8);
queue.Enqueue(7);
queue.Enqueue(6);
queue.Enqueue(5);
queues.Add(queue2);

//an example of how to "rotate"
var lastItem = queues[0].Dequeue(); // (1,2,3)
queues[0].Enqueue(lastItem); // (4,1,2,3)