从范围中选择,但排除某些数字 [英] Select from a range but exclude certain numbers
问题描述
是否可以从给定范围(1-90)中选择一个随机数,但排除某些数字.排除的数字是动态创建的,但可以说它们分别是3、8和80.
Is it possible to pick a random number from a given range (1-90), but exclude certain numbers. The excluded numbers are dynamically created but lets say they are 3, 8, and 80.
我设法创建了随机数生成器,但是无法识别任何可以满足我要求的功能.
I have managed to create random number generator but couldn't identify any functions that let me fulfill my requirements.
Random r = new Random();
this.num = r.Next(1, 90);
要排除的数字是先前生成的数字.因此,如果随机数为1,则将其添加到排除的数字列表中.
The numbers which are to be excluded are previously generated numbers. So, if the random number is one, this would then get added to the excluded numbers list.
推荐答案
在此处使用一些方便的扩展方法,您可以创建一个数字范围并从该范围内随机选择.例如,使用以下扩展方法:
Using some handy extension methods here, you can create a range of numbers and select randomly from that rage. For example, with these extension methods:
public static T RandomElement(this IEnumerable<T> enumerable)
{
return enumerable.RandomElementUsing(new Random());
}
public static T RandomElementUsing(this IEnumerable<T> enumerable, Random rand)
{
int index = rand.Next(0, enumerable.Count());
return enumerable.ElementAt(index);
}
您可以将它们应用于过滤后的数字范围:
You can apply these to a filtered range of numbers:
var random = Enumerable.Range(1, 90).Except(arrayOfRemovedNumbers).RandomElement();
这篇关于从范围中选择,但排除某些数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!