C# 如何检查5个随机数是否相同
我不知道如何测试5个随机生成的数字是否相同。 到目前为止,我所拥有的只是它们的创造C# 如何检查5个随机数是否相同,c#,.net,random,C#,.net,Random,我不知道如何测试5个随机生成的数字是否相同。 到目前为止,我所拥有的只是它们的创造 dice1 = rand.Next(1,7); dice2 = rand.Next(1,7); dice3 = rand.Next(1,7); dice4 = rand.Next(1,7); dice5 = rand.Next(1,7); 在我的第一个答案上编辑,大脑放屁 如果足够容易,您可以执行某种嵌套操作: if ((dice1 == dice2)&&(dice2 == dice3)
dice1 = rand.Next(1,7);
dice2 = rand.Next(1,7);
dice3 = rand.Next(1,7);
dice4 = rand.Next(1,7);
dice5 = rand.Next(1,7);
在我的第一个答案上编辑,大脑放屁 如果足够容易,您可以执行某种嵌套操作:
if ((dice1 == dice2)&&(dice2 == dice3)&&(dice3 == dice4)&&(dice4 == dice5))
这应该行得通
if(dice1 == dice2)
if(dice2 == dice3)
if(dice3 == dice4)
if(dice4 == dice5)
//do something...
可能是一种更漂亮的方式,但这将起作用您可以这样做来生成5个随机骰子卷:
var dice = (from i in Enumerable.Range(0, 5) select rand.Next(1, 7)).ToArray();
或使用流利的语法:
var dice = Enumerable.Range(0, 5).Select(i => rand.Next(1, 7)).ToArray();
这是为了检查他们的平等性:
var first = dice.First(); // or dice[0];
var areSame = dice.Skip(1).All(d => d == first);
您可以使用如下方法:
public static bool AllEqual(params int[] values)
{
foreach (var value in values)
if (values[0] != value)
return false;
return true;
}
// if all the dice rolled the same, do something
if (dice.Distinct().Count() == 1)
{
}
然后像这样使用它:
bool allSame = AllEqual(dice1, dice2, dice3, dice4, dice5);
但正如p.s.w.g所示,在一个可枚举元素中生成所有骰子可能更好。首先,我建议将骰子放入可枚举元素中。P.S.W.G.发布了一个非常优雅的方式来做到这一点,我有点嫉妒,我不会想到的。这就是我的想法:
var dice = new List<int>();
for (int i = 0; i < 5; i++)
{
dice.Add(rand.Next(1, 7));
}
将它们放入一个
哈希集中
,然后检查大小是否相同
var dice = Enumerable.Range(0, 5).Select(i => rand.Next(1, 7)).ToArray();
var set = new HashSet<int>(dice);
bool areSame = set.Count == 1; //1 unique value means they are all the same.
var dice=Enumerable.Range(0,5)。选择(i=>rand.Next(1,7)).ToArray();
变量集=新哈希集(骰子);
bool arame=set.Count==1//1唯一值表示它们都是相同的。
小心延迟/延迟执行<代码>骰子可能会在底部的最后一行重新计算(生成不同的第一个值),从而产生不同的值。linq查询在第一次使用时只应执行一次,然后reused@TimS. 说得好。我不认为这是一个大问题,但在这种情况下,它真的是。我添加了ToArray()
,以使其更为迫切。@Fabske实际上,这不是真的,至少在一般情况下不是这样。在不使用ToArray()
的情况下尝试我的代码,您会发现通常dice.First()!=dice.First()
。真的!泰,我学了一个新东西!
// if all the dice rolled the same, do something
if (dice.Distinct().Count() == 1)
{
}
var dice = Enumerable.Range(0, 5).Select(i => rand.Next(1, 7)).ToArray();
var set = new HashSet<int>(dice);
bool areSame = set.Count == 1; //1 unique value means they are all the same.