string strid = "111,222,333,444,555,666,777,888,";
string[] ranstr = (strid).Split(',');
string ranstr2 = ranstr[new Random().Next(0, ranstr.Length - 1)];我这样写的,只能抽一个.
我要随机抽3个不同的呢?
谁能帮忙改成下面这样的函数.谢谢.ranstr(string str,int n)//str 像上面的strid的内容,比如"111,222,333,". n 是随机抽取个数.
{
}注意,随机抽取的内容不要是重复的哦.

解决方案 »

  1.   

    string ranstr2 = ranstr[new Random().Next(0, ranstr.Length - 1)];
    循环3次把结果放数组里不就得了,不过可能会有重复,做个check
      

  2.   

    ArrayList ranstr(string str,int n)//str 像上面的strid的内容,比如"111,222,333,". n 是随机抽取个数.
    {
    ArrayList al=new ArrayList();
    string ranstr=str;
    int i1=0;
    while(i1<n)
    {
    string ranstr2 = ranstr[new Random().Next(0, ranstr.Length - 1)];
    if(!al.Contains(ranstr2))
    {
    al.Add(ranstr2);
    i1++;
    }
    }
    return al;
    }
      

  3.   

    如LS将取出的值放入一个集合中(ArrayList或HastTable),已存在就重新取,每取一次,累计数加1
      

  4.   


            /// <summary>
            /// 获取随机的字符串
            /// </summary>
            /// <param name="str">要获取的字符串列,用逗号隔开</param>
            /// <param name="count">要获取的个数</param>
            /// <returns></returns>
            static string[] GetRndString(string str, int count)
            {
                List<string> strs = new List<string>();
                List<string> buffer = new List<string>();
                strs.AddRange(str.Split(','));            Random rnd = new Random();
                int index = 0;
                while (index < count && strs.Count > 0)
                {
                    int offset = rnd.Next(0, strs.Count);
                    buffer.Add(strs[offset]);                //移除已获取到的数据,以避免重复获取
                    strs.RemoveAt(offset);
                }
                return buffer.ToArray();
            }
    使用示例
    string[] rndStr = GetRndString("111,222,333,444,555,666,777,888", 4);
      

  5.   

    上面代码少了一句
                    //移除已获取到的数据,以避免重复获取
                    strs.RemoveAt(offset);
                  index ++;