有感而发,为什么会写这个呢,是因为曾经有这么个题,从26个英文字母里随机取1000个,然后我的做法居然是,先手动建个数组,手动往里填“a-z”26个字符,再用随机下标去取,实在是惨不忍睹
1.生成范围内的伪随机整数(result >=min && result < max)
c#.
Random r = new Random();
r.Next(min, max)
//当想连续生成随机数时,不能new多个实例,应该使用公用的实例,连续Next,不过我发现我在 .net core里 可以连续new多个实例而没有重复.
//正确用法
//1.使用同一个实例
Random r = new Random();
for(int i = 0; i< 1000; i++)
{
Console.WriteLine(r.Next(65,65+26));
}
//2.每次给不同的随机种子
for(int i = 0; i< 1000; i++)
{
Random r = new Random(Guid.NewGuid().ToByteArray()[0]);
Console.WriteLine(r.Next(65,65+26));
}
//错误用法(.net core里正常)
for(int i = 0; i< 1000; i++)
{
Random r = new Random();
Console.WriteLine(r.Next(65,65+26));
}
js.
function Random(min,max){return Math.floor(Math.random()*(max-min)+min);}
2.生成多个范围内的伪随机整数
c#.
RandomRang(new int[][] { new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 } });
RandomRang(new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 });
RandomRang(new int[] { 65, 65 + 26 });
int RandomRang(params int[][] arguments)
{
if (arguments.Length > 0)
{
Random r = new Random(Guid.NewGuid().ToByteArray()[0]);//每次给不同的随机种子
var temp = new List<int>();
for (var i = 0; i < arguments.Length; i++)
{
temp.Add(r.Next(arguments[i][0], arguments[i][1]));
}
return temp[r.Next(0, temp.Count)];
}
return 0;
}
js.
RandomRang([65,65+26]);
RandomRang([65,65+26],[97,97+26],[48,48+10]);
function RandomRang(){
if(arguments.length>0){
var temp=[];
for(var i=0;i<arguments.length;i++){
temp.push(random(arguments[i][0],arguments[i][1]));
}
return temp[random(0,temp.length)];
}
}
然后就可以把它们和ASCII码联系起来玩了
1.从26个小写字母里随机取1000个
c#.
StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{
strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(r.Next(97, 97+ 26)) }));
}
Console.WriteLine(strB.ToString());
js.
var temp=[];
for (var i = 0; i < 1000; i++)
{
temp.push(String.fromCharCode(Random(97,97+26)));
}
console.log(temp.join(''));
2.从26个大写字母里随机取1000个
c#.
StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{
strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(r.Next(65, 65+ 26)) }));
}
Console.WriteLine(strB.ToString());
js.
var temp=[];
for (var i = 0; i < 1000; i++)
{
temp.push(String.fromCharCode(Random(65,65+26)));
}
console.log(temp.join(''));
2.从26个大写字母、26个小写字母、0-9里随机取1000个
c#.
StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{
strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(RandomRang(new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 }, new int[] { 48, 48 + 10 })) }));
}
Console.WriteLine(strB.ToString());
js.
var temp=[];
for (var i = 0; i < 1000; i++)
{
temp.push(String.fromCharCode(randomRang([65,65+26],[97,97+26],[48,48+10])));
}
console.log(temp.join(''));
如果不记得a、A、0的ASCII码是多少,也不用怕
c#.
var A=Encoding.ASCII.GetBytes("A")[0];
var a=Encoding.ASCII.GetBytes("a")[0];
js.
var A='A'.charCodeAt();
var a='a'.charCodeAt();