当前位置: 首页 > 编程语言 > C#

如何获取范围内的随机数,排除某些值分享

时间:2023-04-11 00:45:42 C#

如何获取范围内的随机数,排除某些值在C#中,如何获取范围内的随机数-赞1..100,但是这个数字不应该在一些特定的值列表中,比如5、7、17、23吗?由于没有人发布任何示例代码:privateintGiveMeANumber(){varexclude=newHashSet(){5,7,17,23};varrange=Enumerable.Range(1,100).Where(i=>!exclude.Contains(i));varrand=newSystem.Random();intindex=rand.Next(0,100-exclude.Count);返回范围.ElementAt(索引);数字哈希集创建一组所有数字0-100,这些数字不在您的数字列表中,但被某些LINQ排除。创建一个随机对象。使用Random对象可为您提供介于0和数字范围内的元素数(含)之间的数字。返回该索引处的数字。如果您关心BigO,请查看此算法。它假定排除值数组按升序排序并包含0和n-1范围内的值,包括这两个值。publicstaticintrandom_except_list(intn,int[]x){Randomr=newRandom();intresult=r.Next(n-x.Length);for(inti=0;iifyoucall:random_except_list(8,newint[]{3,4,6})它将返回以下值之一:0。这是我使用的扩展方法:Randomrandom=newRandom();publicstaticintRandomNumber(intminN,intmaxN,IEnumerableexNumbers){intresult=exNumbers.First();while(exNumbers.ToList().Contains(result)){result=random.Next(minN,maxN+1);}返回结果;您可以使用do-while语句选择另一个Random,如果它等于您要排除的数字。此代码用于排除您之前选择的号码intnewNumber;做{newNumber=Random.Range(0,100);}while(number==newNumber);数字=新数字;创建一个数组,其中包含所有你想要的数字(或你的语言使用的任何容器)减去你不想要的任何数字,从数组中随机选择。使用函数生成一个介于1和100之间的随机数,而不是编写if语句,例如,如果随机数等于5,7,17??,23,则再次生成随机数,否则使用第一个生成的随机数。将允许的数字放入一个数组中,生成从0到该数组的长度减1的随机整数。使用该整数作为索引,从允许的数字数组中获取一个随机数。如果原始数组包含大对象而不是数字,则通过深度复制允许的对象创建另一个数组将无效。在这种情况下,允许对象的数组应该只包含指向原始数组中对象的指针、引用或索引。在这种情况下,您生成一个随机整数来选择此数组的一个元素,并使用此指针/引用/索引从原始数组中获取所选对象本身。以下是一般案例的工作示例(只是一种可能的解决方案!):usingSystem;使用System.Collections.Generic;publicstaticclassRandomElementSelector{publicstaticIListCollectAllowedElements(IListallElements,IListexcludedElements){列表allowedElements=newList();foreach(所有元素中的T元素)if(!excludedElements.Contains(element))allowedElements.Add(element);返回允许的元素;}publicstaticTSelectRandomElement(IListallowedElements){Randomrandom=newRandom();intrandomIndex=random.Next(allowedElements.Count);返回allowedElements[randomIndex];}publicstaticTSelectRandomElement(IListallElements,IListexcludedElements){IListallowedElements=CollectAllowedElements(allElements,excludedElements);返回SelectRandomElement(allowedElements);}}publicclassTest{publicstaticvoidMain(){constintN=100;//示例#1int[]allNumbers=newint[N];for(inti=0;iallStrings=newList();for(inti=0;i这就是我在这种情况下做的是的,它并不完美,但对我来说效果很好我通常只对1个数字执行此操作,但这是一组排除的数字:假设我想从1-100[5,7,17,23]中随机排除].我总是替换每个排除的数字,如[6,8,18,24]。如果一个随机数落入任何被排除的数字中,我就用一个替换来替换它。我来这里寻找更好的解决方案,但找不到任何解决方案,所以我最终分享了我的解决方案。以上是C#学习教程:如何从范围中获取随机数,不包含一些值分享的所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文来自网络收藏,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处: