シャッフルする拡張メソッド
コード
public static class StringArrayShuffleEx { public static string[] Shuffle(this string[] source) { var sourceList = new List<string>(source); var shuffledList = new List<string>(); var random = new Random(DateTime.Now.Millisecond); while ( true ) { // 1枚抜き取って var item = sourceList[random.Next(sourceList.Count)]; // 新しいとこに移動 shuffledList.Add(item); sourceList.Remove(item); // 元の山が無くなったら終わり if ( sourceList.Count == 0 ) { break; } } return shuffledList.ToArray<string>(); } } class Program { static void Main(string[] args) { string[] cards = { "SA", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "SJ", "SQ", "SK", "HA", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10", "HJ", "HQ", "HK", "DA", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "DJ", "DQ", "DK", "CA", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "CJ", "CQ", "CK", "Joker" }; Console.WriteLine("■シャッフル前"); foreach ( var card in cards ) { Console.WriteLine(card); } Console.WriteLine(""); var shuffledCards = cards.Shuffle(); Console.WriteLine("■シャッフル後"); foreach ( var card in shuffledCards ) { Console.WriteLine(card); } Console.ReadKey(); } }
実行結果
■シャッフル前 SA S2 S3 S4 S5 S6 S7 S8 S9 S10 SJ SQ SK HA H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK DA D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DQ DK CA C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK Joker ■シャッフル後 C4 D3 D5 D6 H10 HJ C5 S5 DK S7 SK DJ S4 H8 C3 D4 HK S3 H4 H5 D8 HA H3 C8 S8 HQ CK H7 H6 D10 D2 C2 Joker CA S10 H9 S6 CQ C9 DQ C10 S2 S9 D9 C6 SQ SA CJ H2 DA C7 SJ D7
ちゃんとシャッフルできてるね♪
#後でわんくまにも転記。