我有一个颜色列表,我想要洗牌并至少混合一点。
我使用
创建一个列表 List<Color> colors = new List<Color> ();
colors.Add(Color.Black);
colors.Add(Color.White);
colors.Add(Color.Red);
但没有.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;
}
但我一直在colorList[0]
和colorList[1]
答案 0 :(得分:4)
试试这个(基于Fisher-Yates shuffle算法)
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();