...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

Listのシャッフル

List をシャッフルしたかった.
配列のシャッフル - 雑記 - otherwise を参考に拡張メソッドを作ってみたが,これだと別の T に対して List を作った時にいちいちコピペしなきゃならん.

public class ListShuffler<T>
{
    public void Shuffle(List<T> list)
    {
        Random rnd = new Random();
        Enumerable.Range(1, list.Count).Reverse().ToList().ForEach(i => Swap(list, rnd.Next(i), i - 1));
    }
    private void Swap(List<T> list, int index1, int index2)
    {
        var a = list[index1];
        list[index1] = list[index2];
        list[index2] = a;
    }
}
// カードの一覧が配列に入れてあったとして
string[] KindOfCards = new string[]
{
    "A", 
    "B", 
    "C", 
};

// カード一覧の配列をシャッフルした List<string> コレクションを作ろう
List<string> cardList = new List<string>(KindOfCards);
ListShuffler<string> shuffler = new ListShuffler<string>();
shuffler.Shuffle(cardList);

特に意味はないが,
C#でjavaの@deprecatedみたいなことをする - uedakoの日記
を参考に,以前の拡張メソッドを Obsolute にしてみた.
なるほど.
やっぱり deprecated なマークがあると気分がいいね.