読者です 読者をやめる 読者になる 読者になる

1 次元配列の回転

1 次元配列を回転するサンプルです。

using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static T[] Rotate<T>(T[] xs, int n) {
        var ret = new T[xs.Length];
        if (ret.Length == 0) return ret;

        int m = n % ret.Length;
        for (int i = 0; i < ret.Length; i++) {
            ret[i] = xs[m++];
            if (m == ret.Length) m = 0;
        }
        return ret;
    }

    static void Main() {
        var xs = Enumerable.Range(1, 5).ToArray();
        for (int i = 0; i < 7; i++) {
            var ys = Rotate(xs, i);
            Console.WriteLine(string.Join(" ", ys));
        }
    }
}

実行結果です。

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
1 2 3 4 5
2 3 4 5 1