洗牌程序,意思就是,打乱现有序列的次序,并每次执行不会出现次序相同的序列的程序。
那么首先想到了使用随机数Random,快速实现如下:
public int[] Shuffle(int[] cards)
{
List<int> listIndex = cards.ToList();
Random r = new Random();
for (int i = 0; i < cards.Length; i++)
{
int randIndex = r.Next(0, listIndex.Count);
cards[i] = listIndex[randIndex];
listIndex.RemoveAt(randIndex);
}
return cards;
}
借助一个由数组复制的list,没打乱一个元素便把list中相应的元素删除掉,避免了重复,
然而,由于知道Random并非真的随机,如果种子相同是有可能出现随机重复的,考虑到这点自以为是的修改了个很牛逼的想法:
public int[] Shuffle(int[] cards)
{
List<int> listIndex = cards.ToList();
Random r = new R