雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

配列のシャッフル

επιστημηさんの解法が目から鱗モノでした。
なるほど、シャッフルってこうやれば綺麗に書けるんですね。すごく勉強になりました。
って事で、より理解を深めるために、自分なりに C# コードに落としてみる試み♪

static class ListExtension {
  public static void Shuffle(this List<int> list) {
    var rnd = new Random();
    Enumerable.Range(1, list.Count).Reverse().ToList().ForEach(i => list.Swap(rnd.Next(i), i - 1));
  }

  public static void Swap(this List<int> list, int index1, int index2) {
    var a = list[index1];
    list[index1] = list[index2];
    list[index2] = a;
  }
}

class ShuffleDemo {
  static void Main() {
    var list = Enumerable.Range(1, 13).ToList();
    Console.WriteLine("シャッフル前");
    list.ForEach(i => Console.Write("{0} ", i));
    Console.WriteLine();
    list.Shuffle();
    Console.WriteLine("シャッフル後");
    list.ForEach(i => Console.Write("{0} ", i));
  }
}