我有一堆扑克牌(List<Card>
),当玩家单击该牌堆时,我想在其中随机挑选纸牌。
要创建“随机卡”体验,我考虑两种方法:
[0]
处选择第一张卡即可。 cards[Random.Range(0,cards.Count)]
选择一张牌(在两种情况下,拾取卡片也会将其从列表中删除。)
这两种方法之间是否存在任何相关的差异(无论是统计上还是其他方面),优缺点等等?或者
答案 0 :(得分:0)
这里有两种方法:随机选择和随机播放。
随机挑选包括获得有序的牌组,挑选一张随机卡并从牌组中抽取该卡。
随机播放涉及获得一个有序的牌组,随机选择一张牌,然后将该牌放到 new 牌组的顶部,然后直接从中抽取牌。
在这两种情况下,您最多都需要进行N-1个随机号码呼叫,其中N是卡组中的卡片数量(当只有一张卡片时,您不需要呼叫RNG )。但是,在“随机选择”情况下,您不必一次全部执行这些随机调用,不仅如此,您甚至不必调用N-1次Random函数。如果最终只抽出前10张卡,那将是10次随机通话。另外,如果您需要重新洗牌,您可以将卡片重新添加到牌中,然后再随机选择。
从算法效率的角度来看,随机选择显然是更好的选择。
还是随机播放卡组。
这就是问题:您不是在尝试从序列中选择随机项目,而是在尝试随机播放一副纸牌。使用与您的设计相匹配的抽象,并且仅在需要时才与抽象有所不同。地狱,我几乎建议您使用Stack
而不是List
,因为它最能与纸牌的基本结构更好地匹配。但是,如果您打算大量操作甲板,则列表可能会更好。
此外,请考虑以下问题:随机挑选假设您的整个牌堆都被洗了。您可能不总是想要整个牌组都需要洗牌。您可能需要明确地将卡片放置在卡座的顶部或底部或中间。如果您想更聪明地使用算法,那么做这些事情将变得更加困难。
答案 1 :(得分:-1)
请使用此代码为数组项随机值选择一个新的随机值。
private void BtnRandomIndex_Click(object sender, EventArgs e)
{
int[] Arr = new int[5];
for (int i = 0; i <= 4; i++)
Arr[i] = i * 10 ;
Random Rnd=new Random();
MessageBox.Show(Rnd.Next((Arr.Length)).ToString());
}
我希望这可以帮助^ _ ^