HOHO:VS2008编译通过。在2005下应该没问题,没用到2008的新语法。 int k = 0; //本轮生成随机数 int c = 0; //生成计数 Dictionary<int, int> values = new Dictionary<int, int>(); Random r = new Random(); while (c < 50) { k = r.Next(1000, 9999); if (values.ContainsKey(k)) { continue; } else { values.Add(k, k); c++; } } foreach (var t in values) { Console.WriteLine(t.Value.ToString()); }
不考虑效率用这个方法:
Dictionary<int,int> values;
每生成一个执行如下操作:
假如生成的随机数中k;
if(values.ContainsKey(k))
{
//continue.
}
else
{
values.Add(k,k);
}
int c = 0; //生成计数
Dictionary<int, int> values = new Dictionary<int, int>();
Random r = new Random();
while (c < 50)
{
k = r.Next(1000, 9999);
if (values.ContainsKey(k))
{
continue;
}
else
{
values.Add(k, k);
c++;
}
}
foreach (var t in values)
{
Console.WriteLine(t.Value.ToString());
}
/// <summary>
/// 获取随机字符串根据guid生成
/// </summary>
/// <param name="len">不能大于36</param>
/// <returns></returns>
public static string GetGuidRandom(int len)
{
string strSep = ",";
string strChar = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,-";
string intChar = "0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6";
char[] chrSep = strSep.ToCharArray();
char[] intSep = strSep.ToCharArray();
string[] aryChar = strChar.Split(chrSep, strChar.Length);
string[] aryInt = intChar.Split(intSep, intChar.Length);
string guid = System.Guid.NewGuid().ToString();
for(int i =0;i<aryChar.Length;i++)
{
guid=guid.Replace(aryChar[i],aryInt[i]);
}
return guid.Substring(0,len);
}
这个是根据GUID来生成的,理论上出现重复的概率很小,为了确保万无一失,生成50个随机数之后最好比对一下,50个数字比对时间复杂度不大,当然你也可以不做这个处理.
public string RandomNum(int n)
{
string strchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = strchar.Split(',');
string VNum = "";
int temp = -1;
Random rand = new Random();
for (int i = 1; i < n + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); }
int t = rand.Next(10);
if (temp != -1 && temp == t)
{
return RandomNum(n);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
}
http://blog.csdn.net/zhoufoxcn/archive/2007/10/24/1842175.aspx