从1-50之间随机取数,但是这个数不能在其他两个集合中出现,其他两个集合例如:
List1:1,5,7,15....
List2:1,7,20,44....
请问这个随机数要怎么取
但是我的集合要是一个实体类类型的呢,比如:List<User1> ,List<User2>,我要看User1和User2的年龄不包含的呢
List<int> l11 = new List<int>(); List<int> l12 = new List<int>(); Random random = new Random(); while (l11.Count<10) { int rand = random.Next(0,51); if (!l11.Contains(rand)) { l11.Add(rand); } } while (l12.Count < 10) { int rand = random.Next(0, 51); if (!l11.Contains(rand) && !l12.Contains(rand)) { l12.Add(rand); } } foreach (var item in l11) { Console.Write(item+" "); } Console.WriteLine(); foreach (var item in l12) { Console.Write(item + " "); }
牛头不对马嘴,不知所云,可能我是菜鸟不了解楼主的意思
Random rd=new random(0,50);
int num = =-1;
while(true)
{
num = rd.next();
if(!List1.contains(num)&&!List2.contains(num))
break;
}
但是我的集合要是一个实体类类型的呢,比如:List<User1> ,List<User2>,我要看User1和User2的年龄不包含的呢
@淘@淘: 额,那就要循环User1来判断年龄了,不然就在做随机数之前先将两个List中的年龄缓存到一个List<int>中
@滴答的雨: 二楼的思路挺好的。若你的选择范围会填充趋近于满的话这种算法优势就体现出来了。但是如果10000个数实际list只有存几百个,那这个算法就不好
楼上有可能循环多次的,给你提供个思路:
首先将0-50的数去掉List1和list2里的数放到数组或(List<int>)里面 list ,取长度,假设是n
Random rd=new Random(0,n-1);
var num=rd.next();
var result=list[num];
实体类的话可以继承IComparable接口,重写比较方法将相等条件设置为根据该类的Age属性,然后就能和普通的数组一样来了。