随机随机排列列表的简单方法

Dan*_*Dan 3 c# xamarin xamarin.forms

我有一个颜色列表,我希望将它们混洗至少混合一点。

我使用创建列表

 List<Color> colors = new List<Color> ();
 colors.Add(Color.Black);
 colors.Add(Color.White);
 colors.Add(Color.Red);
Run Code Online (Sandbox Code Playgroud)

但是.Shuffle我没有注意到,.Sort但是我认为这不是我所需要的。我搜索了一会儿,但是对于这样一个简单的任务,如果有更简单的方法,我发现所有的方法和其他问题似乎都过于复杂。

我尝试使用

List<Color> colorList = new List<Color>();
public void SetupColors()
    {
        List<Color> colors = new List<Color> ();
        colors.Add(Color.BLACK);
        colors.Add(Color.WHITE);
        colors.Add(Color.RED);
        Random random = new Random();
        int n = colors.Count;

        for (int i = colors.Count; i > 1; i--)
        {
            int rnd = random.Next(i + 1);

            var value = colors[rnd];
            colors[rnd] = colors[i];
            colors[i] = value;
        }
        colorList = colors;
    }

    public List<Message> getMessages()
    {
        List<Message> items = new List<Message>
        {
            new Message
            {
                . . . 
                Background = colorList[0]
            },
            new Message
            {
                . . . 
                Background = colorList[1]
            }
        };

        return items;
    }
Run Code Online (Sandbox Code Playgroud)

但我不断收到IndexBound错误的colorList[0]colorList[1]

Gau*_*ave 6

试试这个(基于Fisher-Yates随机算法)

public static void ShuffleMe<T>(this IList<T> list)  
{  
    Random random = new Random();  
    int n = list.Count;  

    for(int i= list.Count - 1; i > 1; i--)
    {
        int rnd = random.Next(i + 1);  

        T value = list[rnd];  
        list[rnd] = list[i];  
        list[i] = value;
    }
}

List<Color> colors = new List<Color> ();
colors.Add(Color.Black);
colors.Add(Color.White);
colors.Add(Color.Red);

colors.ShuffleMe();
Run Code Online (Sandbox Code Playgroud)