2

やりたいことは、コンソール アプリケーションをロードするたびに下の配列をシャッフルすることです。たとえば、バットマンは毎回 'name[0]' の隣name[1]name[2]または代わりに配置できます。name[3]

            heroes[] names = new heroes[4];

            names[0] = batman;              
            names[1] = ironman;             
            names[2] = hulk;
            names[3] = flash;

どうやってするの?

4

2 に答える 2

3

リストとこの拡張メソッドを使用します。

public static class ListExtensions
{
    /// <summary>
    /// Shuffle algorithm as seen on page 32 in the book "Algorithms" (4th edition) by Robert Sedgewick
    /// </summary>
    public static void Shuffle<T>(this IList<T> source)
    {
        var n = source.Count;
        for (var i = 0; i < n; i++)
        {
            // Exchange a[i] with random element in a[i..n-1]
            var r = i + RandomProvider.Instance.Next(0, n - i);
            var temp = source[i];
            source[i] = source[r];
            source[r] = temp;
        }
    }
}

public static class RandomProvider
{
    [ThreadStatic]
    public static readonly Random Instance;

    static RandomProvider()
    {
        Instance = new Random();
    }
}
于 2013-04-04T18:04:40.267 に答える