int temp;
            string number = "";
            int count = new_t_bll.GetNew_TCount();
            IList<int> ilist = new List<int>(count);
            for (int i = 0; i < count; i++)
            {
                ilist.Add(i);
            }
            Random ran = new Random((int)DateTime.Now.Ticks);
            for (int i = 0; i < (ilist.Count - 4); i++)
            {
                temp = ran.Next(0, ilist.Count);
                ilist.RemoveAt(temp);
            }
想生成4个随机数,count是不固定的,是计算表总共几个分类。
自己的意思是通过随机0到分类总数生成一个i,然后在ilist移除i
可是这样要是有很多个分类的话会循环多次有没有直接计算0到count之内生成不同的4个随机数?

解决方案 »

  1.   


                int temp;
                string number = "";
                int count = new_t_bll.GetNew_TCount();
                IList<int> ilist = new List<int>(count);
                for (int i = 0; i < count; i++)
                {
                    ilist.Add(i);
                }
                Random ran = new Random((int)DateTime.Now.Ticks);
                for (int i = ilist.Count; i > (ilist.Count - 4); i++)
                {
                    temp = ran.Next(0, ilist.Count);
                    ilist.RemoveAt(temp);
                }
      

  2.   

    补充:你怎么确定你数据库里面的ilist.Count就能一定大于4?
      

  3.   

    不是大于4
    for (int i = 0; i < (ilist.Count - 4); i++)
    因为要取4个,所以总数减去4,然后循环removeat,这样就剩下4个了!
      

  4.   


    我郁闷,如果你的ilist.Count=10,你减去4等于多少?又循环多少? 所以上面给你的代码是可行的! 不信你试试!
      

  5.   

    var res= Enumerable.Range(0,count-1).OrderBy(Guid.NewGuid()).Take(4)
      

  6.   


      for (int i = ilist.Count; i > (ilist.Count - 4); i++)
                {
                    temp = ran.Next(0, ilist.Count);
                    ilist.RemoveAt(temp);
                }我更郁闷!
    你i都大于ilist.count了
    还怎么ilist.removeat(temo)?
    测试都不用测试,肯定直接抱错
      

  7.   

    哦,写错了 ,更正
    var res = Enumerable.Range(0, count - 1).OrderBy(c=>Guid.NewGuid()).Take(4);
      

  8.   

    O  没仔细看,刚验证了,因为你是用ilist.RemoveAt(temp);(利用索引)移除数据,这个时候我们需要考虑到ilist.Count是一个动态的,我们需要保证for循环只循环4次。
    循环四次好解决,ilist.Count利用一个变量存储,例如:            int temp;
                string number = "";
                int count = new_t_bll.GetNew_TCount();
                IList<int> ilist = new List<int>(count);
                for (int i = 0; i < count; i++)
                {
                    ilist.Add(i);
                }
                Random ran = new Random((int)DateTime.Now.Ticks);
                int ilistCount=ilist.Count;
                for (int i = ilistCount; i > (ilistCount - 4); i--)
                {
                    temp = ran.Next(0, ilist.Count);
                    ilist.RemoveAt(temp);
                }
      

  9.   

    Random rand= new Random(DateTime.Now.Millisecond);
    var result=Enumerable.Range(0, count - 1).Select(i => rand.Next()).Take(4);
      

  10.   

    放哥 有循环判断的不!lumbar表达式还不是太懂!