首页 新闻 会员 周边

C#随机获取0-50之间任意数,但是这个数不能存在于另两个集合

0
[已解决问题] 解决于 2013-03-14 15:02

从1-50之间随机取数,但是这个数不能在其他两个集合中出现,其他两个集合例如:

List1:1,5,7,15....

List2:1,7,20,44....

请问这个随机数要怎么取

问题补充:

但是我的集合要是一个实体类类型的呢,比如:List<User1> ,List<User2>,我要看User1和User2的年龄不包含的呢

淘@淘的主页 淘@淘 | 小虾三级 | 园豆:602
提问于:2013-03-14 14:00
< >
分享
最佳答案
-1
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 + " ");
            }
奖励园豆:5
chenping2008 | 大侠五级 |园豆:9836 | 2013-03-14 14:12

牛头不对马嘴,不知所云,可能我是菜鸟不了解楼主的意思

叶落风行 | 园豆:168 (初学一级) | 2013-03-17 17:58
其他回答(3)
1

Random rd=new random(0,50);

int num = =-1;

while(true)

{

     num = rd.next();

     if(!List1.contains(num)&&!List2.contains(num))

           break;

}

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-03-14 14:02

但是我的集合要是一个实体类类型的呢,比如:List<User1> ,List<User2>,我要看User1和User2的年龄不包含的呢

支持(0) 反对(0) 淘@淘 | 园豆:602 (小虾三级) | 2013-03-14 14:06

@淘@淘: 额,那就要循环User1来判断年龄了,不然就在做随机数之前先将两个List中的年龄缓存到一个List<int>中

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-03-14 14:10

@滴答的雨: 二楼的思路挺好的。若你的选择范围会填充趋近于满的话这种算法优势就体现出来了。但是如果10000个数实际list只有存几百个,那这个算法就不好

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-03-14 14:13
0

楼上有可能循环多次的,给你提供个思路:

首先将0-50的数去掉List1和list2里的数放到数组或(List<int>)里面 list ,取长度,假设是n

Random rd=new Random(0,n-1);

var num=rd.next();

var result=list[num];

叶落风行 | 园豆:168 (初学一级) | 2013-03-14 14:09
0

实体类的话可以继承IComparable接口,重写比较方法将相等条件设置为根据该类的Age属性,然后就能和普通的数组一样来了。

林J | 园豆:202 (菜鸟二级) | 2013-03-14 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册