2014-02-08 4 views
2

Я уверен, что есть слово для того, что я ищу, но так как я этого не знаю, я не могу найти ответ на свою проблему, у меня есть зубчатый массив двойных и я хотите значение с индексом 0, является значение индекса 1 же для индекса 1 не собирается на 2 до конца массива, а последний индекс будучи Pish к индексу 0Push index array

Пример:

Original

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

Стать (после модификации) Я знаю, что это, кажется, я повторное объявление массива, что это не точка, это просто, чтобы показать вам, что это должно быть после.

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

EDIT

Если вы знаете, слово или нечто о том, что я ищу, не могли бы вы сказать в комментарии я буду удалять вопрос и смотреть дальше в него

+0

missclick Я думаю, извините – Mokmeuh

+0

Это обычно называют вращением. Я не считаю, что возможности встроены в массивы. Как насчет использования очередей вместо массивов? –

+0

Никогда не использовались очереди, но если я это сделаю, мне нужно будет заполнить их linq, возможно ли это? – Mokmeuh

ответ

3

Обычно это называется вращающимся. Вы можете достичь его в for -loop, но учтите, что с вашей вращающаяся вправо, это легче работать ваш путь от задней к передней, как это:

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; 
    } 
} 
+0

было бы возможно пойти правильно ???, я так думаю, я просто сделаю цикл for вручную, чтобы получить его – Mokmeuh

+0

@Mokmeuh Да, вы можете вращаться в любом направлении. Вам просто нужно изменить направление внутреннего цикла. –

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)