有多个手机号码用逗号分隔,要想从这些号码里面按指定的比例随即抽取一部分出来,应该怎么做了?
比如下面这个字符串
string tel="13511111,1352222,1353333,1356666,1357777,1358888,1359999,1597777,1598888,1593333,1574444"我想从tel里面按40%的比例随机提取一部分号码出来
【 我希望得到的提取结果是随机的40%,例如:tel="1352222,1356666,1357777,1593333" 】
 
请教各位前辈这个方法该怎么写呀?

解决方案 »

  1.   

    如果,总共有13个号码么办呢?是进1还是向零舍去?建议把要取的个数作为参数专进来
    string tel = "13511111,1352222,1353333,1356666,1357777,1358888,1359999,1597777,1598888,1593333,1574444";
    tel = string.Join(",", tel.Split(',').OrderBy(n => n.GetHashCode()).Take(4).ToArray());
    /* Take(4) 4即要取出来的个数
    1357777,1352222,1358888,1593333 
    */
      

  2.   

    首先你用
    string [] str = tel.Split(',');这样去截取成一个字符串数组之后for(int i=0;i<str.length;i++){
       if(个数占40%){
         这里获取就行了 
      }
    }你应该懂的吧
      

  3.   

    或者 OrderBy(n => Guid.NewGuid().GetHashCode())
    或者你构造一个比较器
      

  4.   

                string tel = "13511111,1352222,1353333,1356666,1357777,1358888,1359999,1597777,1598888,1593333,1574444";
                string[] telSplit = tel.Split(',');
                List<string> list = new List<string>();
                foreach (string s in telSplit)
                    list.Add(s);
                int person = telSplit.Length / 10 * 4;
                List<string> result = new List<string>();
                Random ran = new Random();
                for (int i = 0; i < list.Count; i++)
                {
                    if (i == person)
                        break;
                    int index = ran.Next(list.Count);
                    result.Add(list[index]);
                    list.RemoveAt(index);
                }
      

  5.   

    string tellist = "13511111,1352222,1353333,1356666,1357777,1358888,1359999,1597777,1598888,1593333,1574444";// 将原始串,分割成字符串数组,并随机乱序
    List<string> regularlist = tellist.Split(',').Select(s=>s.Trim()).OrderBy(o=>Guid.NewGuid()).ToList<string>();// 从乱序数组中抽取至少40%的字符串作为结果返回。
    // 四舍五入本来应该是加0.5的,但是要保证达到下限值40%,就改为0.6了。
    List<string> result = regularlist.Take((int) (regularlist.Count * 0.4f + 0.6f)).ToList<string>();Console.WriteLine("load {0} string, get {1} string, percent: {2:#0.%}", regularlist.Count, result.Count, (float) (result.Count) / (float) (regularlist.Count));
    result.ForEach(s => Console.WriteLine(s));
      

  6.   

    忘记贴结果了:
    load 11 string, get 5 string, percent: 45%
    1597777
    1353333
    1593333
    1357777
    1356666
    请按任意键继续. . .