我如何随机化四个数字而不使它们在c#中是相同的?

我如何随机化四个数字而不使它们在c#中是相同的?,c#,C#,我试着在四个数字不相同的情况下将它们随机化,否则会破坏我的代码。我该怎么做才能使它们都一样呢? 这是我的代码: Random r = new Random(); _unknown1 = r.Next(1, 8); _unknown2 = r.Next(1, 8); _unknown3 = r.Next(1, 8); _unknown4 = r.Next(1, 8); 从随机列表中提取随机数: Random r = new Random(); var set = Enumerable.Rang

我试着在四个数字不相同的情况下将它们随机化,否则会破坏我的代码。我该怎么做才能使它们都一样呢? 这是我的代码:

Random r = new Random();

_unknown1 = r.Next(1, 8);
_unknown2 = r.Next(1, 8);
_unknown3 = r.Next(1, 8);
_unknown4 = r.Next(1, 8);

从随机列表中提取随机数:

Random r = new Random();
var set = Enumerable.Range(1, 8)
                    .OrderBy(x => r.Next())
                    .Take(4)
                    .ToList();

_unknown1 = set[0];
_unknown2 = set[1];
_unknown3 = set[2];
_unknown4 = set[3];

从随机列表中提取随机数:

Random r = new Random();
var set = Enumerable.Range(1, 8)
                    .OrderBy(x => r.Next())
                    .Take(4)
                    .ToList();

_unknown1 = set[0];
_unknown2 = set[1];
_unknown3 = set[2];
_unknown4 = set[3];

如果我没弄错你的问题。你不想重复你的随机数。这可能对你有用

List<int> randomNumbers = new List<int>(); 
for (int i=0; i<4; i++) 
{    
    int number;
    do 
    {
        number = random.Next(1, 8);
    }
    while (randomNumbers.Contains(number));
    randomNumbers.Add(number);
}
List randomNumbers=新列表();

对于(int i=0;i,如果我正确理解你的问题。你不想重复你的随机数。这可能对你有用

List<int> randomNumbers = new List<int>(); 
for (int i=0; i<4; i++) 
{    
    int number;
    do 
    {
        number = random.Next(1, 8);
    }
    while (randomNumbers.Contains(number));
    randomNumbers.Add(number);
}
List randomNumbers=新列表();

对于(int i=0;i我该怎么做才能使它们都一样?这就是你想要的吗?我该怎么做才能使它们都一样?这就是你想要的吗?哇!这帮了大忙!谢谢!对于任何非平凡的
MaxValue
,这都是非常低效的。如果我想要2个介于1和10000000之间的随机数,这将生成10000000个值,只取2。@Rob如果您想从10000000个可能性中生成2个随机值,您可以使用常规方法,因为生成相同2个数字的可能性微乎其微。@Abion47对于任何非平凡的应用程序,百万分之一的可能性每天都会发生多次。如果您的逻辑认为它们必须是唯一的,您最好将它们设置为unique,而不是说“好吧,大多数时候它们都是唯一的”。@Rob你在挑剔。OP的应用程序从8个可能的列表中挑选4个唯一的随机数,而不是1000万个列表中的2个。这种方法不是最有效的,但它是最简洁的,并且由于效率差异而导致的性能损失可以忽略不计。如果OP在处理你的这种情况时,我会相应地回答他,但由于他处理的范围很小,碰撞的可能性很高,这种方法就足够了。哇!这帮了大忙!谢谢!对于任何非平凡的
MaxValue
,这都是非常低效的。如果我想要2个介于1和10000000之间的随机数这将生成10000000个值,仅取2。@Rob如果您想从10000000个可能性中生成2个随机值,您可以使用常规方法,因为生成相同2个数字的可能性很小。@Abion47对于任何非平凡的应用程序,百万分之一的可能性每天发生多次。如果您的登录c说它们必须是唯一的,你最好让它们成为唯一的,而不是说“好吧,它们大多数时候都是唯一的”。@Rob你在挑剔。OP的应用程序从8个可能的列表中挑选4个唯一的随机数,而不是1000万个列表中的2个。这种方法不是最有效的,但它最简洁,而且会导致性能损失效率上的差异可以忽略不计。如果OP处理的是你的情况,我会相应地回答他,但是因为他处理的范围很小,碰撞的可能性很高,这种方法就足够了。