/// <summary>
/// 随机数帮助类
/// </summary>
public class RandomHelper
{
#region 单例构造函数
private RandomHelper()
{
}
public static RandomHelper Instance
{
get
{
return Nested.instance;
}
}
private class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly RandomHelper instance = new RandomHelper();
}
#endregion
/// <summary>
/// 随机生成一组有上下界的数
/// </summary>
/// <param name="minValue">上届</param>
/// <param name="maxValue">下届</param>
/// <param name="count">数量</param>
/// <returns></returns>
public List<int> RandomNumbers(int minValue, int maxValue, int count)
{
if (Equals(minValue, maxValue)) return null;
if (count > Math.Abs(maxValue - minValue)) return null;
//生成一个包含所有可取数的链表
var num = minValue;
var numList = new List<int> { num };
while (num++ < maxValue)
{
numList.Add(num);
}
//洗牌
for (int index = 0; index < numList.Count; index++)
{
var flag = Random(minValue, maxValue);
var temp = numList[index];
numList[index] = numList[Math.Abs(flag - index) % numList.Count];
numList[Math.Abs(flag - index) % numList.Count] = temp;
}
//移除多余项
numList.RemoveRange(count, numList.Count - count);
return numList;
}
/// <summary>
/// 随机生成一个数
/// </summary>
/// <returns></returns>
public int Random()
{
return Math.Abs(Guid.NewGuid().GetHashCode());
}
/// <summary>
/// 随机生成一个有上界的数 random <= maxValue
/// </summary>
/// <param name="maxValue">上界</param>
/// <returns></returns>
public int Random(int maxValue)
{
return Math.Abs(Random() % (maxValue + 1));
}
/// <summary>
/// 随机生成一个有区间的数 minValue <= random <= maxValue
/// </summary>
/// <param name="minValue">下界</param>
/// <param name="maxValue">上界</param>
/// <returns></returns>
public int Random(int minValue, int maxValue)
{
var value = Random(maxValue);
return value >= minValue ? value : (Math.Abs(minValue - value) % (maxValue - minValue) + minValue);
}
}
class Program
{
static Dictionary<int, string> dict = new Dictionary<int, string>
{
{ 0,"0000"},
{ 1,"000"},
{ 2,"00"},
{ 3,"0"},
{ 4,string.Empty}
};
static void Main(string[] args)
{
var arry = new int[10];
Console.WriteLine("随机生成1000000个数。");
Console.WriteLine("开始生成。");
var watch = new Stopwatch();
watch.Start(); //开始监视代码运行时间
for (int i = 0; i < 1000000; i++)
arry[RandomHelper.Instance.Random(0, 9)]++;
watch.Stop(); //停止监视
var timespan = watch.Elapsed;
Console.WriteLine();
Console.WriteLine("生成结束。");
Console.WriteLine("执行时间:{0}(毫秒)", timespan.TotalMilliseconds);
int index = 0;
arry.ToList().ForEach(p => Console.WriteLine(string.Format("生成数字“{0}”的次数:{1}", index++, p.ToString())));
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("随机生成1000个非重复的数。");
Console.WriteLine("开始生成。");
var watch2 = new Stopwatch();
watch2.Start(); //开始监视代码运行时间
var result = RandomHelper.Instance.RandomNumbers(0, 1000, 1000);
watch2.Stop(); //停止监视
var timespan2 = watch2.Elapsed;
Console.WriteLine();
Console.WriteLine("生成结束。");
Console.WriteLine("执行时间:{0}(毫秒)", timespan2.TotalMilliseconds);
Console.WriteLine("生成结果:");
index = 0;
result.ForEach(p =>
{
if (!Equals(index, 0) && Equals(index % 25, 0))
Console.WriteLine();
Console.Write(string.Format("{0} ", string.Format("{0}{1}", dict[p.ToString().Length], p)));
index++;
});
Console.ReadKey();
}
}